正则表达式总结

正则表达式(Regular Expression,在代码中常简写为regex、regexp或RE)是一个字符串,此字符串用于描述、匹配一系列符合某个句法规则的字符串。

正则表达式引擎是一种可以处理正则表达式的软件。通常,引擎是更大的应用程序的一部分。在软件世界,不同的正则表达式引擎并不完全互相兼容
正则表达式引擎缺省是大小写敏感的。

此处总结下常用的正则表达式规则。

特殊字符

有12个字符被保留作特殊用途,它们是:
[ ] \ ^ $ . | ? * + ( )
如果要在正则表达式中将这些字符用作文本字符,需要用反斜杠\对其进行转义。
在编程语言中,一些特殊的字符会先被编译器处理,然后再传递给正则引擎。因此为了匹配"C:\temp",要用正则表达式"C:\\temp"。而在C++中,正则表达式则变成了"C:\\\\temp"

重复

不加数量限定则代表出现且仅出现一次

模式 含义
* 重复零次或更多次(任意次
+ 重复一次或更多次(至少一次
? 重复零次或一次(至多一次
{n} 重复n次
{n,} 重复n次或更多次(至少n次)
{n,m} 重复n到m次

* + ? 的重复具有贪婪性,即试图匹配尽可能长的字符串。如需要非贪婪模式,即匹配尽可能短的字符串,在任意一个重复限制符后加上一个?,即:
*? +? ?? {n}? {n,}? {n,m}?

获取文本

使用**()(exp)**匹配exp,并将匹配到的文本缓存到自动命名的组里。命名规则是:从左向右,以分组的左括号为标志,第一个出现的分组的组号为1,第二个为2,以此类推。要获得之前匹配的文本,在表达式中使用”"加上组号的形式,如”\1”。

在VS替换文本操作中,替换为的文本中如需包含原文本,使用”$”加上组号的形式,如”$1”。

字符集

[]组合表示一个匹配集合,如[abc]字符集中不区分顺序。可以使用连字符-定义一个字符范围作为字符集。

在左方括号[后面紧跟一个尖括号^,将会对字符集取反,结果是字符集将匹配任何不在方括号中的字符(包括\n),很重要的一点是,取反字符集必须要匹配一个字符

在字符集中只有4个字符具有特殊含义,它们是:
] \ ^ -

]代表字符集定义的结束;\代表转义;^代表取反;-代表范围定义。其他常见的特殊字符在字符集定义内部都是正常字符,不需要转义。例如,要搜索星号*或加号+,可以用[+*]。当然,如果对那些通常的特殊字符进行转义,得到的正则表达式一样正确,但是这会降低可读性。

如果用?*+操作符来重复一个字符集,将会重复整个字符集,而不仅是它匹配的那个字符。

选择匹配

即逻辑或操作,用|把不同的规则分隔开。通常使用(?:exp1|exp2)的形式。(?:)代表匹配但不获取匹配文本。

位置锚定

模式 含义
^ 匹配一行字符串第一个字符前的位置,即行首
$ 匹配字符串中最后一个字符的后面的位置,即行尾
\b 匹配一个单词边界,也就是指单词和空格间的位置。

常用字符集

模式 含义
. 匹配任何单个字符(换行符\n除外)
\d 匹配任何数字字符
\s 匹配任何空白字符,等价于[ \f\n\r\t\v]
\w 匹配字母或数字或下划线或汉字

最后附上一张相对完整的正则表达式规则以供参考:

参考资料:
WiKi - 正则表达式
深入浅出之正则表达式(一)
正则表达式30分钟入门教程

文章目录
  1. 1. 特殊字符
  2. 2. 重复
  3. 3. 获取文本
  4. 4. 字符集
  5. 5. 选择匹配
  6. 6. 位置锚定
  7. 7. 常用字符集