zoukankan      html  css  js  c++  java
  • 【Perl】perl正则表达式中的元字符、转义字符、量词及匹配方式

    Linux平台上被广泛使用的正则表达式库PCRE - Perl-compatible regular expressions,从其名字即可知道,PCRE提供的是一套与Perl中相兼容的正则表达式。

    元字符(Meta-character)

    • '' : 在任何元字符前面加上反斜线,就会使它失去元字符的特殊作用。例如/3.1415/这个模式里没有通配符
    • '^' : 匹配行首;在字符集中它是脱字符,表示求补集
    • '$' : 匹配行尾(或结尾处新行之前字符)
    • '.' : 除新行(newline)外的任一字符('/s'选项将使'.'匹配新行字符)
    • '|' : 或,表示左边匹配或右边匹配都可以
    • '('与')' : 分组,例如 “/(fred)+/ 可匹配“fredfredfred”这样的字符串
    • '['与']' : 字符类。表示一类字符集合中任意一个,方括号内可使用'-'表示范围,如[0-9]表示匹配数字0到9; 也可使用'^‘表示求补集,如[^0-9]表示除数字0到9外的其他字符

    下面量词中的前三个字符也是元字符
    量词(Quantifier)

    • '*' : 0或任意次。例如“ *”表示0到任意多个字表符;“.*”捡破烂模式,它能通吃所有的字符串
    • '+' : 1或更多次
    • '?' : 0或1次
    • {n} : n次
    • {n,} : 至少n次
    • {n, m} : n到m次。例如“/a{5,15}/可以匹配重复5到15次的字母a


    自动匹配变量

    • $`: 匹配部分的前一部分存放在$`之中,后面的符号在键盘左上方与“ ”在一个键上
    • $&:整个被匹配上的部分保存在这个变量中
    • $':这个变量保存了字符串中剩下的部分,即除了匹配部分的前一部分,被匹配上的部分后剩下的部分。


    匹配方式

    • 贪婪(greedy)方式:在模式其余部分匹配前提下,尽可能多地匹配字符。

           贪婪量词:+* 

    • 非贪婪匹配(minimum): 对于每一个贪婪的量词,都有一个非贪婪的量词。以加号(+)为例, 我们可以改用非贪婪的量词+?,这表示一次或更多匹配(加号的本意)。但是匹配的字符串却  是越短越好,而不再是越长越好。

            非贪婪量词:+?*?

    • 占有式:与贪婪方式相近,尽可能多地匹配字符,但绝不回退(backtrack,即使模式其余部分无法匹配,也不减少本部分的匹配数量)。在数量词之后使用'+'表示使用占有式匹配。


    转义序列

    • ' ' : 制表符(HT, TAB)
    • ' ' : 换行(LF, NL)
    • ' ' : 回车(CR)
    • 'f' : 进纸(Form Feed, FF)
    • 'a' : 报警 (Alarm, BEL)
    • 'e' : 转义(ESC)
    • "xx" : 八进制数值对应字符,如33表示ESC
    • "xhh" : 16进制数值对应字符,如x1B表示ESC
    • "x{hhhh}" : 16进制long型数值对应字符,如x{263a}表示unicode SMILEY
    • "cK" : K可以为任意字母,表示控制字符"control-K","cK"表示如VT
    • "N{name}" : unicode命名字符
    • "N{U+hhhh}" : unicode字符
    • 'l' : 小写下一字符
    • 'u' : 大写下一字符
    • 'L' : 小写随后字符串直至'E'
    • 'U' : 大写随后字符串直至'E'
    • 'E' : 结束大小写转换
    • 'Q' : 引用随后字符(禁止转义)直至'E'


    字符类及其他转义字符

    • 'w' : 匹任任一单词(word)字符(26个英文字母、10个数字,加下划线'_'),等同于字符集[A-Za-z0-9_]
    • 'W' : 匹配任一非单词字母
    • 's' : 任一空白字符(空格' ', 制表符' '等)
    • 'S' : 任一非空白字符
    • 'd' : 任一数字字符[0-9]
    • 'D' : 任一非数字字符
    • “pP” : 匹配命名属性P
    • "PP" : 匹配非P
    • 'X' : 匹配unicode扩展字符集(eXtended grapheme cluster)
    • 'C' : 匹配单个C字符(字节),即使工作在unicode模式下
    • ' ' : n为数字,后向引用指定组n
    • "gn" : 后向引用指定组n
    • "g{-n}" : 表示相对(当前位置之前的)第n个后用引用组n
    • "g{name}" : 后向引用命名组(name)。例如“(/(.)g{1}ll)”可以匹配aall这样的字符串,aa为连续相同的两个字符
    • "k{name}" : 后向引用
    • 'K' : 使K左侧部分,不引入到$&中
    • 'N' : 除' '外的任一字符
    • 'v' : 垂直空白符
    • 'V' : 非垂直空白符
    • 'h' : 水平空白符
    • 'H' : 非水平空白符
    • 'R' : 行分割符号


    POSIX字符类
    POSIX字符类表示语法:[:class:], 在pattern中则必须写为"[[:class:]]"。

    • "[[:alpha:]]" : (英文)字母
    • "[[:alnum:]]" : 字母或数字字符
    • "[[:ascii:]]" : ASCII字符集中字符
    • "[[:blank:]]" : GNU扩展,等价于空格' '或水平制表符' '
    • "[[:cntrl:]]" : 任一控制字符
    • "[[:digit:]]" : 任一数字字符,等价于'd'
    • "[[:graph:]]" : 除空格外的任一可打印字符
    • "[[:lower:]]" : 任一小写字符
    • "[[:print:]]" : 任一可打印字符,包括空格
    • "[[:punct:]]" : 除单词字符(字母,'_')外的任一图形字符
    • "[[:space:]]" : 任一空白字符,等价于's'垂直制表符"cK"
    • "[[:upper:]]" : 任一大写字符
    • "[[:word:]]" : Perl扩展, 等价于'w'
    • "[[:xdigit:]]" : 任一16进制数字



    Perl中,"[[^:class:]]"表示posix指定类的补集,这种情况下也可略去[::],在类名前加'^'表示为"[^class]"。Assertion

    • '' : 单词边界。例如整单词搜索模式“/Fred/”,可以匹配Fred或fred
    • 'B' : 非单词边界
    • 'A' : 字符串首
    • '' : 字符串尾或尾部换行字符之前
    • 'z' : 字符串尾
    • 'G' : 在上一个匹配处进行匹配
     
    参考资料:http://bbs.eetop.cn/thread-362058-1-1.html
              http://jianlee.ylinux.org/Computer/Perl/perl_base.html
              《Perl语言入门》第五版
    有志者事竟成
  • 相关阅读:
    WPF窗口和用户控件事件相互触发
    C#排序算法总结
    C#.NET操作数据库通用类
    在C#的WPF程序使用XAML实现画线
    centos7 用户介绍
    Linux系列2
    nginx的使用
    TCP协议、三次握手以及滑动窗口等的介绍(计算机网络基础知识)
    mysql的
    jQuery的东西
  • 原文地址:https://www.cnblogs.com/dancheblog/p/3528000.html
Copyright © 2011-2022 走看看