简介 Introduction

正则表达式(Regular Expression) 是计算机科学的一个概念,正则表达式是应用单个字符串来形容和匹配一系列合乎句法规定的字符串。在很多文本编辑器里,正则表达式通常被用来检索和替换那些合乎某个模式的文本。


匹配规定

字面量字符和元字符

在正则表达式中,只示意其本身字符含意的叫做字面量字符。其实,大部分字符都示意字面含意。如:

/a/    #匹配 'a'/b/    #匹配 'b'/ab/   #匹配 'ab'

还有一些字符代表非凡含意,而不是其本身意义,叫做元字符,如:

  • 字符示意“或”运算,匹配字符右边或左边的字符串,的数量可推广。
/a|b/      #匹配 'a' 或者 'b'/a|b|c/   #匹配 'a' 或 'b' 或 'c'/ab|cd/    #匹配 'ab' 或 'cd' 而不匹配 'a' 或 'b' 或 'c' 或 'd'
  • .字符匹配除了回车、换行、行分隔符和段宰割符的字符。
/a.b/  #可匹配a,b之间任意字符,如:'acb','a0b'等,但不匹配两头含有多个字符的状况
  • 地位符:

    • ^字符匹配字符串开始的地位
    • $字符匹配字符串完结的地位
/^123/  #可匹配'123'呈现在开始地位的字符串,如'12345'/123$/  #可匹配'123'呈现在完结地位的字符串,如'0123'

转义字符

如果想要匹配正则表达式中的元字符自身,则须要在它们后面加反斜杠\,如:

/a\+b/  #匹配 'a+b'

正则表达式中须要反斜杠本义的有:.^${[()\+*


特殊字符

正则表达式对一些不能打印的字符提供了非凡的示意办法:

  • \cX 示意Ctrl-[X],其中的X是A-Z之中任一个英文字母,用来匹配控制字符。
  • [\b] 匹配退格键(U+0008)。
  • \n 匹配换行键。
  • \r 匹配回车键。
  • \t 匹配制表符 tab(U+0009)。
  • \v 匹配垂直制表符(U+000B)。
  • \f 匹配换页符(U+000C)。
  • \0 匹配null字符(U+0000)

字符类

字符类示意给定一系列字符,只有匹配其中任意一个即可。字符序列被放入方括号[]中,如:

/[abc]/  #可匹配'app,因为'app'含有字符'a',但不能匹配'def',因为'def'不含'abc'中任意一个
  • 如果方括号内的第一个字符是[^],则示意除了字符类之中的字符,其余字符都能够匹配。比方,[^xyz]示意除了xyz之外都能够匹配。
/[^abc]/  #能够匹配'cde',但不能匹配'cba'
  • 如果方括号内没有其余字符,只有[^],就示意匹配所有字符,其中包含换行符。相比之下,点号作为元字符(.)是不包含换行符的
  • ^只有在字符类的第一个地位才有非凡含意,否则就是字面含意。
  • 某些状况下,对于间断序列的字符,连字符(-)用来提供简写模式,示意字符的间断范畴。比方,[abc]能够写成[a-c][0123456789]能够写成[0-9],26个大写字母能够写成[A-Z]

修饰符

修饰符放在正则表达式的开端,示意一些附加规定,如:

  • i修饰符示意疏忽大小写
/abc/i     #可匹配 'abc' 或 'ABC'
  • m修饰符示意会毁坏^$的匹配规定
/name$/    #不能匹配'my name\n'因为结尾不是name,而是换行符/name$/m   #能够匹配'my name\n'
  • g修饰符示意全局匹配。默认状况下,正则表达式第一次匹配胜利就进行了,而g修饰符能够匹配到开端
/aaaaa/    #只匹配第一个'a'/aaaaa/g   #匹配所有的'a'

数量符

数量符用来示意某个模式的呈现次数。

  • ? 问号示意某个模式呈现0次或1次。
  • * 星号示意某个模式呈现0次或屡次。
  • + 加号示意某个模式呈现1次或屡次。
/n?ame/  #可匹配'name','ame'/n*ame/  #可匹配'name','ame','nname'/n+ame/  #可匹配'name','nname'

数量符默认为贪心匹配,在数量符后加?能够将其变为非贪心匹配:

  • +?:示意某个模式呈现1次或屡次,匹配时采纳非贪心模式。
  • *?:示意某个模式呈现0次或屡次,匹配时采纳非贪心模式。
  • ??:表格某个模式呈现0次或1次,匹配时采纳非贪心模式

贪心匹配指匹配到下一个字符不满足要求为止,而非贪心匹配则只匹配到第一个满足要求的字符。


反复

示意模式的准确匹配次数,应用大括号{}示意。{n}示意恰好反复n次,{n,}示意至多反复n次,{n,m}示意反复不少于n次,不多于m次。

/a{2}b/   #可匹配'aab'/a{2,}b/  #可匹配'aab','aaab'/a{2,4}b/ #匹配'aaab'

预约义

预约义模式指的是某些常见模式的简写形式。

  • \d 匹配0-9之间的任一数字,相当于[0-9]
  • \D 匹配所有0-9以外的字符,相当于[^0-9]
  • \w 匹配任意的字母、数字和下划线,相当于[A-Za-z0-9_]
  • \W 除所有字母、数字和下划线以外的字符,相当于[^A-Za-z0-9_]
  • \s 匹配空格(包含换行符、制表符、空格符等),相等于[ \t\r\n\v\f]
  • \S 匹配非空格的字符,相当于[^ \t\r\n\v\f]
  • \b 匹配词的边界。
  • \B 匹配非词边界,即在词的外部。