正则表达式
正则表达式
正则表达式详细总结
正则表达式(Regular Expression,简称 RegEx)是一种强大的工具,用于匹配、查找、替换符合特定规则的字符串。它广泛应用于文本处理、表单验证、数据提取等场景。
一、正则表达式的组成
正则表达式由普通字符和具有特殊含义的元字符(metacharacters)组成。普通字符包括字母、数字和其他未被正则表达式解释的字符。而元字符则用来构建匹配规则。
二、元字符
元字符是正则表达式中具有特殊含义的字符。以下是常见的元字符及其功能:
| 元字符 | 说明 |
|---|---|
. |
匹配除换行符以外的任意单个字符 |
\w |
匹配字母、数字、下划线 |
\s |
匹配空白字符(空格、制表符、换页符等) |
\d |
匹配数字(0-9) |
\b |
匹配单词边界 |
^ |
匹配字符串的开头(在集合内,如 [^a],表示“非”) |
$ |
匹配字符串的结尾 |
[] |
匹配方括号内的任意字符,例如 [aeiou] 匹配任意元音字母 |
[^] |
匹配不在括号内的字符,例如 [^aeiou] 匹配非元音字母 |
\ |
转义字符,用于匹配元字符本身(如 \. 匹配字符 .) |
示例
.匹配任意字符:a.b匹配acb、a1b等,但不匹配ab。\d匹配数字:\d{3}匹配连续的三个数字,如123。^和$匹配开头和结尾:^abc$匹配整个字符串是abc。
三、反义字符
反义字符用于匹配某类字符的非集合内容。
| 反义字符 | 说明 |
|---|---|
\W |
匹配非字母、数字、下划线的字符 |
\S |
匹配非空白字符 |
\D |
匹配非数字字符 |
\B |
匹配非单词边界 |
[^x] |
匹配除了 x 以外的任意字符 |
[^abc] |
匹配除了 a、b、c 以外的任意字符 |
示例
\W匹配非单词字符:如+、#等。\S匹配非空白字符:如a或1。
四、限定符
限定符用于指定匹配字符的重复次数。
| 限定符 | 说明 |
|---|---|
* |
匹配前面的字符 0 次或多次 |
+ |
匹配前面的字符 1 次或多次 |
? |
匹配前面的字符 0 次或 1 次 |
{n} |
匹配前面的字符恰好 n 次 |
{n,} |
匹配前面的字符至少 n 次 |
{n,m} |
匹配前面的字符 n 到 m 次 |
示例
a*匹配 0 或多次 a:可匹配""、a、aa等。\d{3,5}匹配 3 到 5 位数字:如123或12345。
五、懒惰匹配和贪婪匹配
- 贪婪匹配:默认行为,尽可能多地匹配字符。
- 懒惰匹配:通过添加
?,匹配尽可能少的字符。
| 贪婪匹配 | 懒惰匹配 |
|---|---|
.* |
.*? |
.+ |
.+? |
.? |
?? |
{n,m} |
{n,m}? |
示例
- 贪婪匹配:
a.*b匹配a123b456b的整个字符串。 - 懒惰匹配:
a.*?b匹配a123b。
六、分组与分枝
1. 分组
分组通过括号 () 将一部分规则组合为一个整体。
| 语法 | 说明 |
|---|---|
(exp) |
捕获分组,匹配 exp 并捕获到分组 |
(?:exp) |
非捕获分组,匹配 exp 但不捕获 |
(?<name>exp) |
命名捕获分组,匹配 exp 并捕获为 name 的组 |
2. 分枝
分枝通过 | 表示“或”关系。
示例
- 捕获分组:
(ab)+匹配abab,捕获ab。 - 分枝:
a|b匹配a或b,例如cat|dog匹配cat或dog。
七、零宽断言
零宽断言用于匹配满足某些条件的位置,而不消费字符。
| 语法 | 说明 |
|---|---|
(?=exp) |
正向预测断言,匹配后面是 exp 的位置 |
(?!exp) |
负向预测断言,匹配后面不是 exp 的位置 |
(?<=exp) |
正向回顾断言,匹配前面是 exp 的位置 |
(?<!exp) |
负向回顾断言,匹配前面不是 exp 的位置 |
示例
- 正向预测:
\w+(?=ing)匹配sing中的sing。 - 负向回顾:
(?<!not )good匹配good,但不匹配not good。
八、后向引用
后向引用可以重复匹配捕获分组内的内容。
| 语法 | 说明 |
|---|---|
\1 |
引用第一个捕获分组的内容 |
\k<name> |
引用命名捕获分组 name 的内容 |
示例
- **
\1**:\b(\w+)\b\s+\1匹配重复单词(如go go)。 - **
\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 |
忽略空白符并启用注释 |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 D!
评论
