正则表达式

转义字符

字符

解释

\n

换行符

\t

制表符

\\

代表\本身

\^,\$,\.,\,,\{,\},\?,\+,\*,|,\[,\]

匹配这些字符本身

标准字符集合

字符

解释

\d

任意一个数字,0~9中的任意一个

\w

任意一个字母或数字或下划线,也就是A~Z,a~z,0~9,_中任意一个

\s

包括空格、制表符、换行符等空白字符的其中任意一个

.

小数点可以匹配任意一个字符,但是不包括\n,如果要匹配包括\n在内的所有字符,一般用[\s\S]

除了“.”之外都区分大小写,大写就是相反的意思

自定义字符集合

字符

解释

[ab5@]

匹配a或b或5或@

[^abc]

匹配abc之外的任意一个字符

[a-z]

匹配a~z之间的任意一个字母

[^a-d0-3]

匹配a~d和0~3之外的任意一个字符

除了^-\之外的特殊符号,如果被包含在中括号中,则失去特殊意义

量词

字符

解释

{n}

表示匹配到n次

{m,n}

表示匹配m到n次,最少m,最大n

{n,}

表示至少匹配到n次

?

表示匹配到0次或1次,等价于{0,1}

+

表示至少匹配到1次,等价于{1,}

*

表示不匹配或匹配任意次,等价于{0,}

默认量词匹配模式为贪婪模式,也就是能多匹配就多匹配,如果在量词后加上"?"则会更改为非贪婪模式,意思是满足最低匹配规则就停止继续匹配。

例如:"123456"如果是匹配"\d{2,6}"的话则会匹配到:"123456",如果是匹配"\d{2,6}?"的话则会分别匹配到"12","34","56"

位置匹配

字符

解释

^

匹配字符串开始的位置

$

匹配字符串结束的位置

\b

匹配一个单词的边界,在匹配中不光hello是一个单词,hello123也会被当作一个单词

(?=exp)

该位置后面会匹配到exp

(?<=exp)

该位置前面会匹配到exp

(?!exp)

该位置后面不会匹配到exp

(?<!exp)

该位置前面不会匹配到exp

位置匹配不会匹配到带有宽度的字符,而仅仅是匹配位置,可以理解成位置的逻辑判断

匹配模式

字符

解释

IgnoreCase

忽略大小写模式

SingleLine

单行模式,是否将整个字符视为一行,只有一个开头和结尾,同时"."可以匹配到"\n"

MultiLine

多行模式,每行字符都有独自的开头和结尾,此时如果要匹配绝对开头或结尾则需要使用"\A"和"\Z"代替"^"和"$"

不同软件或语言中匹配模式的英文单词不一定是"IgnoreCase"、"SingleLine"、"MultiLine",请根据实际情况作出判断(例如有时候忽略大小写的单词为CaseInsensitive,多行模式的英文单词为LineBreak),大多数情况下默认的匹配模式为:区分大小写、多行模式

分组和引用

字符

解释

|

"与或非"中"或"的关系,表示满足左边或右边都会被匹配到

()

括号中的表达式作为一个整体,同时可以被引用

(?:exp)

括号中的表达式作为一个整体,但是不可以被引用

例如:

"goto gogo"这串字符

如果匹配 "[a-z]{2}" 的话,则会匹配到"go","to","go","go";

如果是匹配 "([a-z]{2})\1" 的话,则会匹配到:"gogo";

如果是匹配 "(?:[a-z]{2})\1" 的话,则什么都匹配不到。

引用可能会造成性能降低,所以尽可能的使用(?:exp)这种形式