正则表达式语法速查

前人总结揭开正则表达式的神秘面纱正则表达式30分钟入门教程在线测试工具

某些字符

代码 说明
\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) 匹配exp,并捕获文本到名称为name的组里,也可以写成(?’name’exp)
(?:exp) 匹配exp,不捕获匹配的文本,也不给此分组分配组号

本文标题:正则表达式语法速查

文章作者:微石

发布时间:2018年06月10日 - 21:06

最后更新:2018年07月19日 - 11:07

原始链接:akihoo.github.io/posts/4fdf7389.html

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。