基本正则表达式

字符通配元字符

  • .:匹配除\n之外的任何单个字符。要匹配包括\n在内的任何字符,请使用像(.|\n)的模式

  • []:匹配指定集合或范围内的任意单个字符

    • [abc]:匹配a/b/c中的任意一个字符
    • [0-9][[:digit:]]:匹配0到9任意单个数字
    • [a-z][[:lower:]]:匹配单个小写字母
    • [A-Z][[:upper:]]:匹配单个大写字母
    • [[:alpha:]]:匹配单个大写或小写字母
    • [[:alnum:]]:匹配单个字母或数字
    • [[:space:]]:匹配单个空格字符
    • [[:punct:]]:匹配单个标点符号
  • [^]:匹配指定集合或范围外的任意单个字符

    • [^a-z][^[:lower:]]:匹配小写字母之外的单个字符
    • [^A-Z][^[:upper:]]:匹配大写字母之外的单个字符
    • [^0-9][^[:digit:]]:匹配数字之外的单个字符
    • [^a-z0-9]:匹配字母和数字之外的单个字符
    • [^[:alpha:]]:匹配字母之外的单个字符
    • [^[:alnum:]]:匹配字母和数字之外的单个字符
    • [^[:space:]]:匹配空格字符之外的单个字符
    • [^[:punct:]]:匹配标点符号之外的单个字符
  • x|y:匹配x或y

    • z|food:匹配zfood
    • (z|f)ood:匹配zoodfood
  • \cx:匹配由x指明的控制字符;x的值必须为A-Za-z之一。否则,将c视为一个原义的c字符

  • \d:匹配一个数字字符,等价于[0-9]

  • \D:匹配一个非数字字符,等价于[^0-9]

  • \f:匹配一个换页符,等价于\x0c\cL

  • \n:匹配一个换行符,等价于\x0a\cJ

  • \r:匹配一个回车符,等价于\x0d\cM

  • \t:匹配一个制表符,等价于\x09\cI

  • \v:匹配一个垂直制表符,等价于\x0b\cK

  • \s:匹配任何不可见字符,包括空格、制表符、换页符等等,等价于[\f\n\r\t\v]

  • \S:匹配任何可见字符,等价于[^\f\n\r\t\v]

  • \w:匹配包括下划线的任何单词字符,类似但不等价于[A-Za-z0-9_],这里的单词字符使用Unicode字符集

  • \W:匹配任何非单词字符

  • \xn:匹配n,其中n为十六进制转义值。十六进制转义值必须为确定的两个数字长

    • \x41:匹配A
    • \x041:等价于\x04&1
  • \un:匹配n,其中n是一个用四个十六进制数字表示的Unicode字符

    • \u00A9:匹配版权符号&copy
  • \n:标识一个八进制转义值或一个向后引用。如果\n之前至少存在n个获取的子表达式(即至少存在n个分组),则n为向后引用。否则,如果n为八进制数字0-7,则n为一个八进制转义值

  • \nm:标识一个八进制转义值或一个向后引用。如果\nm之前至少存在nm个获取的子表达式(即至少存在nm个分组),则nm为向后引用。如果\nm之前至少存在n个获取的子表达式,则n为一个后跟文字m的向后引用。如果前面的条件都不满足,若n和m均为八进制数字0-7,则nm将匹配八进制转义值nm。

  • \nml:如果n为八进制数字0-7,且m和l均为八进制数字0-7,则匹配八进制转义值nml。

次数通配元字符

作用对象:作用于紧挨着元字符的前面普通单字符、被元字符匹配到的单字符或字符串

  • *:匹配前面的子表达式出现任意次

    • 匹配单字符:默认是匹配前一个紧挨次数通配元字符的字符;例如,zo*匹配z以及zoo;等价于{0,}
    • 匹配字符串:使用()将字符串括起来,注意此处需要转义;例如z\(xo\)*
  • \+:匹配前面的子表达式出现一次或多次

    • 匹配单字符:默认是匹配前一个紧挨次数通配元字符的字符;例如,zo\+匹配zo以及zoo,但不能匹配z;等价于\{1,\}
    • 匹配字符串:使用()将字符串括起来,注意此处需要转义;例如z\(xo\)\+
  • \?:匹配前面的子表达式出现零次或一次

    • 匹配单字符:默认是匹配前一个紧挨次数通配元字符的字符;例如,zo\?匹配zo以及z,但不能匹配zoo
    • 匹配字符串:使用()将字符串括起来,注意此处需要转义;例如do\(es\)\?匹配doesdoes中的do;等价于\{0,1\}
  • \{n\}:n是一个非负整数,匹配前面的子表达式出现n次

    • 匹配单字符:默认是匹配前一个紧挨次数通配元字符的字符;例如,o\{2\}不能匹配Bob中的o,但是能匹配food中的两个o
    • 匹配字符串:使用()将字符串括起来,注意此处需要转义;例如do\(es\)\{2\}
  • \{n,\}:n是一个非负整数,匹配前面的子表达式至少出现n次

    • 匹配单字符:默认是匹配前一个紧挨次数通配元字符的字符;例如,o\{2,\}不能匹配Bob中的o,但能匹配foooood中的所有oo\{1,\}等价于o+o\{0,\}则等价于o*
    • 匹配字符串:使用()将字符串括起来,注意此处需要转义;例如do\(es\)\{2,\}
  • \{n,m\}:m和n均为非负整数,其中n<=m。匹配前面的子表达式至少出现n次至多出现m次

    • 匹配单字符:默认是匹配前一个紧挨次数通配元字符的字符;例如,o\{1,3\}匹配fooooood中的前三个oo\{0,1\}等价于o\?请注意逗号和两个数之间不能有空格
    • 匹配字符串:使用()将字符串括起来,注意此处需要转义;例如do\(es\)\{1,3\}
  • 注意:

    • ?紧跟在任何一个其他限制符*、\+、\?、\{n\}、\{n,\}、\{n,m\}后面时,匹配模式是非贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串,而默认的贪婪模式则尽可能多的匹配所搜索的字符串。例如,对于字符串ooooo\+?将匹配单个o,而o\+将匹配所有o

位置锚定元字符

作用对象:作用于紧挨着元字符的前面或后面普通单字符、被元字符匹配到的单字符或字符串

  • ^:锚定输入字符串的开始位置(即锚定行首)。如果设置了RegExp对象的Multiline多行匹配属性,^也锚定\n\r之后的位置

  • $:锚定输入字符串的结束位置(即锚定行尾)。如果设置了RegExp对象的Multiline多行匹配属性,$也锚定\n\r之前的位置

    • ^$表示空白行
  • \b:锚定一个单词边界(首部或尾部),也就是指单词和空格间的位置

    • er\b可以匹配never中的er,但不能匹配verb中的er
    • \ber\b只能匹配er
  • \B:锚定非单词边界,即不是首部也不是尾部

    • er\B能匹配verb中的er,但不能匹配never中的er
  • \<:锚定单词(word)首部

  • \>:锚定单词(word)尾部

    • \<the\>能够匹配字符串for the wise中的the,但是不能匹配字符串otherwise中的the

分组引用元字符

作用对象:被pattern匹配到的字符集合(pattern是由字符通配元字符、次数通配元字符、位置锚定元字符组合而成)

  • \(pattern\):匹配pattern并获取这一匹配。并将匹配到的字符保存到一个临时区域Matches集合VBScript中的SubMatches集合(一个正则表达式中最多可以保存9个)

    • 在shell环境中可以使用\1\9基于分组字符串的位置对分组字符串整体依次进行引用(依次引用前面被自左往右的第1到第9个左括号以及与之对应的右括号中的模式匹配到的内容)
    • 在JavaScript环境中可以使用$0$9基于分组字符串的位置对分组字符串整体依次进行引用(依次引用前面被自左往右的第1到第9个左括号以及与之对应的右括号中的模式匹配到的内容)
  • \(?:pattern\):匹配pattern但不获取匹配结果,也就是说这是一个非获取匹配,不对匹配到的内容做临时存储供以后使用。这在使用或字符(|)来组合一个模式时很有用

    • industr\(?:y|ies\)就是一个比industry|industries更简略的表达式
  • \(?=pattern\):正向肯定预查,在任何匹配pattern的字符串开始处匹配查找字符串。这是一个非获取匹配,不对匹配到的内容做临时存储供以后使用

    • Windows\(?=95|98|NT|2000\)能匹配Windows2000中的Windows,但不能匹配Windows3.1中的Windows。预查不消耗字符,也就是说,在一个匹配发生后,立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始
  • \(?!pattern\):正向否定预查,在任何不匹配pattern的字符串开始处匹配查找字符串。这是一个非获取匹配,不对匹配到的内容做临时存储供以后使用

    • Windows\(?!95|98|NT|2000\)能匹配Windows3.1中的Windows,但不能匹配Windows2000中的Windows。预查不消耗字符,也就是说,在一个匹配发生后,立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始
  • \(?<=pattern\):反向肯定预查,与正向肯定预查类拟,只是方向相反

    • \(?<=95|98|NT|2000\)Windows能匹配2000Windows中的Windows,但不能匹配3.1Windows中的Windows
  • \(?<!pattern\):反向否定预查,与正向否定预查类拟,只是方向相反

    • \(?<!95|98|NT|2000\)Windows能匹配3.1Windows中的Windows,但不能匹配2000Windows中的Windows

温馨提示

  • 所有没有被\转义的元字符如果想表示字符本身含义,则需要添加\转义符进行转义
  • 所有已经被\转义的元字符如果想表示字符本身含义,则需要去掉\转义符取消转义