基础字符匹配
语法 | 说明 | 示例 |
---|
abc | 匹配连续字符 “abc” | abc → “abc” |
[abc] | 匹配 a、b 或 c 中的任意字符 | [ae] → “a”(在 “apple” 中) |
[^abc] | 匹配非 a、b、c 的字符 | [^ap] → “l”(在 “apple” 中) |
[a-z] | 匹配任意小写字母 | [a-c] → “a”、“b”、“c” |
. | 匹配任意单个字符(换行符除外) | a.c → “abc”、“aac” |
预定义字符类
语法 | 说明 | 等价写法 |
---|
\d | 数字(0-9) | [0-9] |
\D | 非数字 | [^0-9] |
\w | 单词字符(字母、数字、下划线) | [a-zA-Z0-9_] |
\W | 非单词字符 | [^\w] |
\s | 空白字符(空格、制表符、换行符) | [ \t\n\r] |
\S | 非空白字符 | [^\s] |
边界匹配
语法 | 说明 | 示例 |
---|
^ | 字符串开始 | ^abc → “abc”(需在开头) |
$ | 字符串结束 | end$ → “end”(需在结尾) |
\b | 单词边界 | \bcat\b → “cat”(不匹配 “catalog”) |
\B | 非单词边界 | \Bcat\B → “cat”(在 “scatter” 中) |
重复匹配
语法 | 说明 | 示例 |
---|
* | 匹配 0 次或多次 | a* → “”、“a”、“aa” |
+ | 匹配 1 次或多次 | a+ → “a”、“aa”(不匹配空) |
? | 匹配 0 次或 1 次 | a? → “”、“a” |
{n} | 匹配 n 次 | a{3} → “aaa” |
{n,} | 匹配 至少 n 次 | a{2,} → “aa”、“aaa” |
{n,m} | 匹配 n 到 m 次 | a{2,4} → “aa”、“aaa” |
贪婪模式(默认):尽可能多匹配(a.*b
在 “axbxb” 中匹配整个字符串)。
非贪婪模式:加 ?
尽可能少匹配(a.*?b
→ “axb”)。
分组与捕获
语法 | 说明 | 示例 |
---|
(exp) | 捕获分组,后续可引用 | (abc)+ → “abcabc” |
(?:exp) | 非捕获分组(不存储) | `(?:abc) |
\n | 引用第 n 个分组 | (a)\1 → “aa”(匹配连续两个相同字符) |
(?<name>exp) | 命名分组(通过名称引用) | (?<num>\d+) → 捕获数字并命名为 “num” |
注:在真实大数据场景中,非捕获分组通常更快更可靠。
选择与断言
语法 | 说明 | 示例 |
---|
` | ` | 或逻辑 |
(?=exp) | 正向先行断言(后面是 exp) | a(?=b) → “a”(仅当后跟 “b” 时) |
(?!exp) | 负向先行断言(后面不是 exp) | a(?!b) → “a”(当后跟非 “b” 时) |
(?<=exp) | 正向后行断言(前面是 exp) | (?<=a)b → “b”(仅当前有 “a” 时) |
(?<!exp) | 负向后行断言(前面不是 exp) | (?<!a)b → “b”(当前不是 “a” 时) |
转义与特殊字符
标志(Flags)
标志 | 说明 | 示例(全局搜索) |
---|
i | 忽略大小写 | /aBc/i → “abc”、“ABC” |
g | 全局匹配(所有结果) | a 在 “aaa” 中匹配 3 次 |
m | 多行模式(^ /$ 匹配每行) | ^a 匹配每行开头的 “a” |
s | 单行模式(. 匹配换行符) | a.c → “a\nc”(当 s 启用) |
常用正则示例
邮箱验证:
1
| ^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$
|
URL 提取:
日期匹配(YYYY-MM-DD):
中文汉字:
工具与学习资源
掌握正则表达式可大幅提升文本处理效率!建议从实际案例入手练习,逐步熟悉复杂语法。
本文参考: