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

自动匹配变量

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

匹配方式

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

贪婪量词:+和*

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

非贪婪量词:+?和*?

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

转义序列

  • '\t' : 制表符(HT, TAB)
  • '\n' : 换行(LF, NL)
  • '\r' : 回车(CR)
  • '\f' : 进纸(Form Feed, FF)
  • '\a' : 报警 (Alarm, BEL)
  • '\e' : 转义(ESC)
  • "\0xx" : 八进制数值对应字符,如\033表示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' : 任一空白字符(空格' ', 制表符'\t'等)
  • '\S' : 任一非空白字符
  • '\d' : 任一数字字符[0-9]
  • '\D' : 任一非数字字符
  • “\pP” : 匹配命名属性P
  • "\PP" : 匹配非P
  • '\X' : 匹配unicode扩展字符集(eXtended grapheme cluster)
  • '\C' : 匹配单个C字符(字节),即使工作在unicode模式下
  • '\n' : n为数字,后向引用指定组n
  • "\gn" : 后向引用指定组n
  • "\g{-n}" : 表示相对(当前位置之前的)第n个后用引用组n
  • "\g{name}" : 后向引用命名组(name)。例如“(/(.)\g{1}ll)”可以匹配aall这样的字符串,aa为连续相同的两个字符
  • "\k{name}" : 后向引用
  • '\K' : 使\K左侧部分,不引入到$&中
  • '\N' : 除'\n'外的任一字符
  • '\v' : 垂直空白符
  • '\V' : 非垂直空白符
  • '\h' : 水平空白符
  • '\H' : 非水平空白符
  • '\R' : 行分割符号

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

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

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

  • '\b' : 单词边界。例如整单词搜索模式“/\bFred\b/”,可以匹配Fred或fred
  • '\B' : 非单词边界
  • '\A' : 字符串首
  • '\Z' : 字符串尾或尾部换行字符之前
  • '\z' : 字符串尾
  • '\G' : 在上一个匹配处进行匹配
 
参考资料:http://bbs.eetop.cn/thread-362058-1-1.html
          http://jianlee.ylinux.org/Computer/Perl/perl_base.html
          《Perl语言入门》第五版

【Perl】perl正则表达式中的元字符、转义字符、量词及匹配方式的更多相关文章

  1. <摘录>perl正则表达式中的元字符、转义字符、量词及匹配方式

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

  2. 正则表达式中pw、IDCard和EM匹配

    1密码强度正则 //密码强度正则,最少6位,包括至少1个大写字母,1个小写字母,1个数字,1个特殊字符 var pPattern = /^.*(?=.{6,})(?=.*\d)(?=.*[A-Z])( ...

  3. 备忘:js正则表达式中的元字符

    Predefined term Matches \t Horizontal tab \b Backspace \v Vertical tab \f Form feed \r Carriage retu ...

  4. Perl入门(四)Perl的正则表达式

    正则表达式是Perl语言的特色,基本的语法不是很难,但是编写一个符合需求.高效的正则表达式,还是有一些挑战的. Perl的三种匹配模式 1.查找 语法:m/正则表达式内容/; 作用:查找匹配内容中是否 ...

  5. JS 正则表达式中的特殊字符

    正则表达式中的特殊字符 字符 含意 \ 做为转意,即通常在"\"后面的字符不按原来意义解释,如/b/匹配字符"b",当b前面加了反斜杆后/\b/,转意为匹配一个 ...

  6. python正则表达式中的分组 group

    维基百科:http://wiki.ubuntu.org.cn/Python%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F%E6%93%8D%E4%BD%9C ...

  7. * 和 ?在 shell 命令行中与在正则表达式中的区别

    Linux 正则表达式 你有没有想过,在 shell 命令行中的 *,?和正则表达式中的*,?是否一样? 自打好多年前接触 DOS,就知道了* 和?这两个通配符(Wildcard),象 dir *.* ...

  8. Delphi 正则表达式语法(4): 常用转义字符与 .

    Delphi 正则表达式语法(4): 常用转义字符与 . // \d 匹配所有数字, 相当于 [0-9] var   reg: TPerlRegEx; begin   reg := TPerlRegE ...

  9. 正则表达式中 group groups区别

    先看代码instance: 1 >>> a="123abc456" 2 >>> import re 3 >>> print(r ...

随机推荐

  1. SQLite -创建数据库

    SQLite -创建数据库 SQLite sqlite3命令用于创建新的SQLite数据库.你不需要有任何特权来创建一个数据库. 语法: sqlite3命令的基本语法如下: $sqlite3 Data ...

  2. (转)让Spring自动扫描和管理Bean

    http://blog.csdn.net/yerenyuan_pku/article/details/52861403 前面的例子我们都是使用XML的bean定义来配置组件.在一个稍大的项目中,通常会 ...

  3. vue 数据没有驱动视图?

    Part.1  问题 数据改变,视图却没有根据数据而改变. 原因在于,数据并不在 vue 监听范围之内,vue 只对事先在 data 中声明的变量丶对象等类型数据进行监听 Part.2  例子 < ...

  4. Sql Server 中锁的概念(1)

    Sql Server 中锁的概念   锁的概述 一. 为什么要引入锁 多个用户同时对数据库的并发操作时会带来以下数据不一致的问题: 丢失更新A,B两个用户读同一数据并进行修改,其中一个用户的修改结果破 ...

  5. day02五大运算符:逻辑运算符、成员运算符、算数、比较、赋值、

    # -*- encoding: utf-8 -*-# print('hello 中国')# 变量# print(10 + 20 + 3 + 15)# print((10 + 20 + 3 + 15)* ...

  6. Spring框架针对dao层的jdbcTemplate操作crud之add添加数据库操作

    使用jdbcTemplate 原理是把加载驱动Class.forName("com.mysql.jdbc.Driver"); 和连接数据库Connection conn=Drive ...

  7. es6(三set和map数据结构)

    es6中提供了一个新的数据结构Set,他有点类似数组,但和数组不同的是,在里面你如果写入重复的值的话,他不会显示重复值. const s =new Set(); [2,3,4,5,6,6,6,7,8, ...

  8. Educational Codeforces Round 59 (Rated for Div. 2) (前四题)

    A. Digits Sequence Dividing(英文速读) 练习英语速读的题,我还上来昏迷一次....只要长度大于2那么一定可以等于2那么前面大于后面就行其他no 大于2的时候分成前面1个剩下 ...

  9. 用户管理命令--useradd

    用户管理命令--useradd 作用:用于添加一个新的用户 格式:useradd [ 选项 ] 用户名 选项的常用介绍 -u: UID指定用户id,必须是唯一的,并且大于499 -c: 添加注释,可以 ...

  10. tornado框架基础06-SQLAlchemy连接数据库

    01 ORM 在服务器后台,数据是要存储在数据库的,但是如果项目在开发和部署的时候,是使用的不同的数据库,该怎么办呢?是不是需要把所有的 SQL 语句都再重新写一遍呢? 和数据库相关,不同的数据库需要 ...