某些字符
| 代码 | 说明 |
|---|---|
| \r | 换行 |
| \n | 回车 |
| \t | 制表符 |
常用的元字符
| 代码 | 说明 |
|---|---|
| . | 匹配除换行符以外的任意字符 |
| \w | 匹配字母或数字或下划线或汉字 |
| \s | 匹配任意的空白符 |
| \d | 匹配数字 |
| \b | 匹配单词的开始或结束 |
| ^ | 匹配字符串的开始(行的开始) |
| $ | 匹配字符串的结束(行的结束) |
如果想匹配. or ^ or $,需要在前面加上转义字符 \ ,如\. 。
使用实例
| 文本 | 正则表达式 | 结果 |
|---|---|---|
| This is Jack | \bis\b | is |
| This is Jack | \sis | is([空格]is) |
| good good study | ^good | good(第一个) |
重复
| 代码/语法 | 说明 |
|---|---|
| * | 重复零次或更多次(贪心) |
| + | 重复一次或更多次 (占有) |
| ? | 重复零次或一次 (懒惰) |
| {n} | 重复n次 |
| {n,} | 重复n次或更多次 |
| {n,m} | 重复n到m次 |
- 贪婪(贪心) 如”*”字符 贪婪量词会首先匹配整个字符串,尝试匹配时,它会选定尽可能多的内容,如果 失败则回退一个字符,然后再次尝试回退的过程就叫做回溯,它会每次回退一个字符,直到找到匹配的内容或者没有字符可以回退。相比下面两种贪婪量词对资源的消耗是最大的,
- 懒惰(勉强) 如 “?”懒惰量词使用另一种方式匹配,它从目标的起始位置开始尝试匹配,每次检查一个字符,并寻找它要匹配的内容,如此循环直到字符结尾处。
- 占有如”+” 占有量词会覆盖事个目标字符串,然后尝试寻找匹配内容 ,但它只尝试一次,不会回溯,就好比先抓一把石头,然后从石头中挑出黄金
自定义指定范围
使用[]指定范围,可以匹配[]中任意字符。也可在[]中使用 ^ 符号,匹配除[]之外的任意字符。
如:
[0-9]效果与\d一致[ijk]匹配i,j,k
分枝条件
使用 | 字符,类似于或,如 0\d{2}-\d{8}|0\d{3}-\d{7},将匹配满足 0\d{2}-\d{8} 或 0\d{3}-\d{7} 的字符,需要注意的是,匹配分枝条件时,将会从左到右地测试每个条件,如果满足了某个分枝的话,就不会去再管其它的条件了。
分组
使用()进行分组,括号内的值作为子表达式,如:(1234){4}将会匹配到1234123412341234.
反义
| 代码/语法 | 说明 |
|---|---|
| \W | 匹配任意不是字母,数字,下划线,汉字的字符 |
| \S | 匹配任意不是空白符的字符 |
| \D | 匹配任意非数字的字符 |
| \B | 匹配不是单词开头或结束的位置 |
| [^x] | 匹配除了x以外的任意字符 |
| [^aeiou] | 匹配除了aeiou这几个字母以外的任意字符 |
反向引用 \1, \2…
表达式在匹配时,表达式引擎会将小括号 “( )” 包含的表达式所匹配到的字符串记录下来。在获取匹配结果的时候,小括号包含的表达式所匹配到的字符串可以单独获取。这一点,在前面的举例中,已经多次展示了。在实际应用场合中,当用某种边界来查找,而所要获取的内容又不包含边界时,必须使用小括号来指定所要的范围。比如前面的 “
\n 表示分组n,即第n个左括号(所包含的内容。
如:
源字符串:abcdaabcde
正则表达式:([ab])\1
[ab]将匹配字符a或b,当[]匹配到a时,\1==a,当[]匹配到b时,\1==b,此表达式将会匹配aa或bb。
也可使用?<name>给分组命名,使用\k<name>引用,\b(\w+)\b\s+\1\b可写成\b(?<name>\w+)\b\s\k<name>\b。
| 代码/语法 | 说明 |
|---|---|
| (exp) | 匹配exp,并捕获文本到自动命名的组里 |
| (? |
匹配exp,并捕获文本到名称为name的组里,也可以写成(?’name’exp) |
| (?:exp) | 匹配exp,不捕获匹配的文本,也不给此分组分配组号 |