正则表达式


正则表达式详细总结

正则表达式(Regular Expression,简称 RegEx)是一种强大的工具,用于匹配、查找、替换符合特定规则的字符串。它广泛应用于文本处理、表单验证、数据提取等场景。


一、正则表达式的组成

正则表达式由普通字符和具有特殊含义的元字符(metacharacters)组成。普通字符包括字母、数字和其他未被正则表达式解释的字符。而元字符则用来构建匹配规则。


二、元字符

元字符是正则表达式中具有特殊含义的字符。以下是常见的元字符及其功能:

元字符 说明
. 匹配除换行符以外的任意单个字符
\w 匹配字母、数字、下划线
\s 匹配空白字符(空格、制表符、换页符等)
\d 匹配数字(0-9)
\b 匹配单词边界
^ 匹配字符串的开头(在集合内,如 [^a],表示“非”)
$ 匹配字符串的结尾
[] 匹配方括号内的任意字符,例如 [aeiou] 匹配任意元音字母
[^] 匹配不在括号内的字符,例如 [^aeiou] 匹配非元音字母
\ 转义字符,用于匹配元字符本身(如 \. 匹配字符 .

示例

  1. . 匹配任意字符a.b 匹配 acba1b 等,但不匹配 ab
  2. \d 匹配数字\d{3} 匹配连续的三个数字,如 123
  3. ^$ 匹配开头和结尾^abc$ 匹配整个字符串是 abc

三、反义字符

反义字符用于匹配某类字符的非集合内容。

反义字符 说明
\W 匹配非字母、数字、下划线的字符
\S 匹配非空白字符
\D 匹配非数字字符
\B 匹配非单词边界
[^x] 匹配除了 x 以外的任意字符
[^abc] 匹配除了 abc 以外的任意字符

示例

  1. \W 匹配非单词字符:如 +# 等。
  2. \S 匹配非空白字符:如 a1

四、限定符

限定符用于指定匹配字符的重复次数。

限定符 说明
* 匹配前面的字符 0 次或多次
+ 匹配前面的字符 1 次或多次
? 匹配前面的字符 0 次或 1 次
{n} 匹配前面的字符恰好 n 次
{n,} 匹配前面的字符至少 n 次
{n,m} 匹配前面的字符 n 到 m 次

示例

  1. a* 匹配 0 或多次 a:可匹配 ""aaa 等。
  2. \d{3,5} 匹配 3 到 5 位数字:如 12312345

五、懒惰匹配和贪婪匹配

  • 贪婪匹配:默认行为,尽可能多地匹配字符。
  • 懒惰匹配:通过添加 ?,匹配尽可能少的字符。
贪婪匹配 懒惰匹配
.* .*?
.+ .+?
.? ??
{n,m} {n,m}?

示例

  1. 贪婪匹配a.*b 匹配 a123b456b 的整个字符串。
  2. 懒惰匹配a.*?b 匹配 a123b

六、分组与分枝

1. 分组

分组通过括号 () 将一部分规则组合为一个整体。

语法 说明
(exp) 捕获分组,匹配 exp 并捕获到分组
(?:exp) 非捕获分组,匹配 exp 但不捕获
(?<name>exp) 命名捕获分组,匹配 exp 并捕获为 name 的组

2. 分枝

分枝通过 | 表示“或”关系。

示例

  1. 捕获分组(ab)+ 匹配 abab,捕获 ab
  2. 分枝a|b 匹配 ab,例如 cat|dog 匹配 catdog

七、零宽断言

零宽断言用于匹配满足某些条件的位置,而不消费字符。

语法 说明
(?=exp) 正向预测断言,匹配后面是 exp 的位置
(?!exp) 负向预测断言,匹配后面不是 exp 的位置
(?<=exp) 正向回顾断言,匹配前面是 exp 的位置
(?<!exp) 负向回顾断言,匹配前面不是 exp 的位置

示例

  1. 正向预测\w+(?=ing) 匹配 sing 中的 sing
  2. 负向回顾(?<!not )good 匹配 good,但不匹配 not good

八、后向引用

后向引用可以重复匹配捕获分组内的内容。

语法 说明
\1 引用第一个捕获分组的内容
\k<name> 引用命名捕获分组 name 的内容

示例

  1. **\1**:\b(\w+)\b\s+\1 匹配重复单词(如 go go)。
  2. **\k<name>**:(?<word>\w+)\s+\k<word> 匹配命名分组的重复。

九、转义字符

转义字符用于匹配元字符本身。

转义字符 说明
\. 匹配字符 .
\* 匹配字符 *
\? 匹配字符 ?
\\ 匹配字符 \

十、常用正则表达式

功能 表达式
匹配数字 ^\d+$
匹配邮箱 ^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$
匹配 IP 地址 `^((25[0-5]
匹配日期(yyyy-mm-dd) `^(19
匹配中文 ^[\u4e00-\u9fa5]+$
匹配 URL ^https?:\/\/[\w\-]+(\.[\w\-]+)+[\w\-\.,@?^=%&:/~+#]*$

十一、正则表达式的模式修饰符

修饰符 说明
i 忽略大小写
m 多行模式,^$ 匹配每行的开头和结尾
s 单行模式,使 . 匹配包括换行符在内的所有字符
x 忽略空白符并启用注释

文章作者: Lavoisier
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Lavoisier !
评论
  目录