“正则表达式”描述在搜索文本正文时要匹配的一个或多个字符串。 该表达式可用作一个将字符模式与要搜索的字符串相匹配的模板。
正则表达式包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为“元字符”)。
特殊字符
若要匹配这些特殊字符之一,必须首先转义字符,即,在字符前面加反斜杠字符 ()。 例如,若要搜索“+”文本字符,可使用表达式“+”。
元字符 | 行为 | 示例 |
* | 0次或者多次匹配前面的字符或者子表达式,等价于{0,} | ta*可以和t , ta taaaaa进行匹配 |
+ | 1次或者多次匹配前面的字符或者子表达式,等价于{1,} | ta+可以和ta taaaaa进行匹配 |
? |
0次或者1次匹配前面的字符或者子表达式,等价于{0,1},
当?紧随其他符号的时候,会启用非贪婪模式 |
ta?可以和t , ta进行匹配
ta*?和taaaaa进行匹配时,会匹配t;但是ta?和taaaaa 进行匹配时会匹配ta |
^ |
匹配字符串开始的位置,表示从字符串的初始位置开始寻找
当放在[]里面时,代表不匹配[]其中的字符 |
^d{2}表示匹配字符串从头开始的2个数字
[^abc]代表不匹配a,b,c三个任意元字符
|
$ | 匹配字符串结束的位置,表示字符串的结束位置 | d{2}$匹配结尾处的两个数字 |
. | 匹配除了换行符 的任意单个字符 如果需要匹配换行符,则要写成[sS]类似的 | b.b与bob,bsb都可以匹配 |
[] | 匹配[]中的任意一个字符 | [abcd]匹配a,b,c,d中的任何一个 |
{} | 表示重复前面字符的重复次数 | a{2,4}匹配aa,aaa,aaaa |
() | 表示一组 | (a*)ccc 匹配ccc和accc |
| | 表示在多个选项之间进行选择 | a|b|c等价于[abc] |
对于上面的这些字符都有特殊含义,如果想要找到不是特殊含义的,可以加来进行转义 | \ 与匹配 +与+匹配 | |
/ | 代表正则表达式的开始和结尾 | /book+/ig |
元字符
有一些特殊的字符
元字符 | 行为 | 示例 |
与一个字的边界匹配,就是字与空格间的位置 | er与never中的er匹配,但是与verb中的er不匹配 | |
B | 不与一个字的边界匹配,就是字与空格间的位置 | erB与never中的er不匹配,但是与verb中的er匹配 |
d | 等效于 [0-9] | d{2,4}与12,123,1234匹配 |
D | 等效于 [^0-9] | D{2,4}与AC,ASCF匹配 |
w | 等效于 [A-Za-z0-9_] | |
W | 等效于 [^A-Za-z0-9_] | |
(模式) | 与模式匹配,并保存匹配项 | (chapter)[1-9]匹配chapter4时,会保存chapter以方便以后用 |
(?:模式) | 与模式匹配,但是不保存匹配项 | |
(?=模式) |
找到一个匹配项后,将在匹配文本之前开始搜索下一个匹配项。 不会保存匹配项以备将来之用。 |
^(?=.*d).{4,8}$ 对密码应用以下限制:其长度必须介于 4到 8 个字符之间, 并且必须至少包含一个数字。 在该模式中,.*d 查找后跟有数字的任意多个字符。 对于搜索字符串“abc3qr”,这与“abc3”匹配。 从该匹配项之前(而不是之后)开始,.{4,8} 与包含 4-8 个字符的字符串匹配。 这与“abc3qr”匹配。 ^ 和 $ 指定搜索字符串的开始和结束位置。 这将在搜索字符串包含匹配字符之外 的任何字符时阻止匹配。表示先做(?=)中的表达式,然后再对整体做?=模式之后的正则表达式 |
优先级
下图从高到低的讲了一下运算符的优先级排序
运算符 | 说明 |
进行转义字符 | |
(),(?:),(?=) | 括号和中括号 |
*,+,?,{n,} | 限定符 |
^,$,d,D,w,W | 定位点和序列 |
| | 替换 |