正则表达式符号匹配规则详解大全
正则表达式是用于匹配字符串中字符组合的模式
正则表达式是正则表达式引擎尝试匹配输入文本的一种模式。 模式由一个或多个字符文本、运算符或构造组成。
正则表达式核心规则详解
一、元字符(Metacharacters)
| 元字符 | 描述 | 示例 | 匹配结果 |
|---|---|---|---|
\ |
转义字符,用于匹配特殊字符本身 | \. 匹配 .<br>\\ 匹配 \ |
\. → .<br>\\ → \ |
^ |
匹配字符串开头(多行模式下匹配行首) | ^abc 匹配以 abc 开头的字符串 |
"abc123" → 匹配<br>"123abc" → 不匹配 |
$ |
匹配字符串结尾(多行模式下匹配行尾) | abc$ 匹配以 abc 结尾的字符串 |
"123abc" → 匹配<br>"abc123" → 不匹配 |
. |
匹配任意单个字符(除 \n 和 \r) |
a.c 匹配 abc、a1c 等 |
"a1c" → 匹配<br>"a\nc" → 不匹配 |
(pattern) |
捕获分组,记录匹配内容 | (ab)+ 匹配 ab、abab 并捕获 ab |
"abab" → 捕获 ab 两次 |
(?:pattern) |
非捕获分组,仅分组不捕获 | (?:ab)+ 匹配 abab 但不捕获 |
"abab" → 无捕获 |
(?=pattern) |
正向肯定预查(后面必须匹配) | Windows(?=95) 匹配 Windows 但要求后面是 95 |
"Windows95" → 匹配 Windows<br>"Windows3.1" → 不匹配 |
(?!pattern) |
正向否定预查(后面不能匹配) | Windows(?!95) 匹配 Windows 但后面不能是 95 |
"Windows3.1" → 匹配 Windows<br>"Windows95" → 不匹配 |
(?<=pattern) |
反向肯定预查(前面必须匹配) | (?<=95)Windows 匹配 Windows 但前面必须是 95 |
"95Windows" → 匹配 Windows<br>"3.1Windows" → 不匹配 |
(?<!pattern) |
反向否定预查(前面不能匹配) | (?<!95)Windows 匹配 Windows 但前面不能是 95 |
"3.1Windows" → 匹配 Windows<br>"95Windows" → 不匹配 |
x|y |
匹配 x 或 y |
z|food 匹配 z 或 food |
"z" → 匹配<br>"food" → 匹配 |
二、字符集合(Character Classes)
| 符号 | 描述 | 示例 | 匹配结果 |
|---|---|---|---|
[xyz] |
匹配任意一个指定字符 | [abc] 匹配 a、b 或 c |
"plain" → 匹配 a |
[^xyz] |
匹配任意一个不在集合中的字符 | [^abc] 匹配非 a、b、c 的字符 |
"plain" → 匹配 p、l、i、n |
[a-z] |
匹配指定范围内的字符 | [a-z] 匹配任意小写字母 |
"hello" → 匹配所有字母 |
[^a-z] |
匹配不在指定范围内的字符 | [^a-z] 匹配非小写字母的字符 |
"Hello123" → 匹配 H、1、2、3 |
\d |
匹配数字(等价于 [0-9]) |
\d\d 匹配两位数字 |
"12" → 匹配 |
\D |
匹配非数字(等价于 [^0-9]) |
\D\D 匹配两个非数字字符 |
"ab" → 匹配 |
\w |
匹配单词字符(字母、数字、下划线) | \w\w 匹配两个单词字符 |
"a1"、"_x" → 匹配 |
\W |
匹配非单词字符 | \W\W 匹配两个非单词字符 |
"@!" → 匹配 |
\s |
匹配空白字符(空格、制表符等) | \s\s 匹配两个空白字符 |
" \t" → 匹配 |
\S |
匹配非空白字符 | \S\S 匹配两个非空白字符 |
"ab" → 匹配 |
三、限定符(Quantifiers)
| 限定符 | 描述 | 示例 | 匹配结果 |
|---|---|---|---|
* |
匹配前一个字符 0 次或多次 | ab*c 匹配 ac、abc、abbc |
"ac" → 匹配<br>"abbc" → 匹配 |
+ |
匹配前一个字符 1 次或多次 | ab+c 匹配 abc、abbc |
"abc" → 匹配<br>"ac" → 不匹配 |
? |
匹配前一个字符 0 次或 1 次 | ab?c 匹配 ac、abc |
"ac" → 匹配<br>"abbc" → 不匹配 |
{n} |
匹配前一个字符恰好 n 次 | a{3} 匹配 aaa |
"aaa" → 匹配<br>"aa" → 不匹配 |
{n,} |
匹配前一个字符至少 n 次 | a{2,} 匹配 aa、aaa... |
"aa" → 匹配<br>"a" → 不匹配 |
{n,m} |
匹配前一个字符 n 到 m 次 | a{2,4} 匹配 aa、aaa、aaaa |
"aaa" → 匹配<br>"a" → 不匹配 |
?? |
非贪婪模式(尽可能少匹配) | a.*?b 匹配 a 到第一个 b |
"aabab" → 匹配 aab 和 ab |
四、特殊字符与转义
| 符号 | 描述 | 示例 | 匹配结果 |
|---|---|---|---|
\n |
匹配换行符 | a\nb 匹配跨行的 a 和 b |
"a\nb" → 匹配 |
\t |
匹配制表符 | a\tb 匹配 a 后跟制表符 b |
"a\tb" → 匹配 |
\xnn |
匹配十六进制字符 | \x41 匹配 A |
"A" → 匹配 |
\unnnn |
匹配 Unicode 字符 | \u00A9 匹配版权符号 © |
"©" → 匹配 |
五、边界匹配(Boundary Anchors)
| 符号 | 描述 | 示例 | 匹配结果 |
|---|---|---|---|
^ |
字符串开头 | ^abc 匹配以 abc 开头的字符串 |
"abc123" → 匹配 |
$ |
字符串结尾 | abc$ 匹配以 abc 结尾的字符串 |
"123abc" → 匹配 |
\b |
单词边界 | \bword\b 匹配独立的 word |
"word" → 匹配<br>"sword" → 不匹配 |
\B |
非单词边界 | \Bword\B 匹配非独立的 word |
"sword" → 匹配<br>"word" → 不匹配 |
六、修饰符(Flags)
| 修饰符 | 描述 | 示例 |
|---|---|---|
i |
不区分大小写 | /abc/i 匹配 abc、ABC |
g |
全局匹配 | /a/g 匹配所有 a |
m |
多行模式 | /^a/m 匹配每行的开头 a |
s |
点号匹配换行符 | /.*/s 匹配包含 \n 的字符串 |
各语言对正则表达式语法的支持情况
表格说明:
- 符号
√表示该语言 / 工具原生支持对应正则语法 - 空白单元格表示默认不支持该语法(或需特殊配置)
- 备注栏补充了特殊情况下的语法支持条件(如 awk 的参数要求)
