正则表达式
转义字符
字符 | 解释 |
---|---|
\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)这种形式