正则表达式规则
正则表达式(Regular Expression)是一种用于匹配字符串模式的工具,以下是其核心规则和常用语法的总结,适用于大多数编程语言(如 JavaScript、Python、Java 等):
一、基础匹配规则
普通字符
大多数字符(如字母、数字、标点)直接匹配自身:
abc 匹配字符串 "abc"
123 匹配字符串 "123"
特殊字符(元字符)
具有特殊含义的字符,需用 \ 转义才能匹配自身:
. ^ $ * + ? { } ( ) [ ] \ |
示例:\. 匹配 ".",\* 匹配 "*"
二、字符集与范围
字符集 [ ]
匹配括号内的任意一个字符:
[abc] 匹配 "a"、"b" 或 "c"
[0-9] 匹配任意数字(等价于 \d)
[^0-9] 匹配非数字(^ 表示 “非”,等价于 \D)
[a-zA-Z] 匹配任意大小写字母
预定义字符集
简化常用匹配规则:
| 符号 | 含义 |
|---|---|
| . | 匹配任意字符(除换行符 \n) |
| \d | 匹配数字(等价于 [0-9]) |
| \D | 匹配非数字(等价于 [^0-9]) |
| \w | 匹配字母、数字、下划线([a-zA-Z0-9_]) |
| \W | 匹配非单词字符(等价于 [^\w]) |
| \s | 匹配空白字符(空格、制表符 \t、换行符 \n 等) |
| \S | 匹配非空白字符 |
三、量词(匹配次数)
用于指定前面的字符 / 子模式匹配的次数:
| 量词 | 含义 |
|---|---|
| * | 匹配 0 次或多次(尽可能多,贪婪模式) |
| + | 匹配 1 次或多次 |
| ? | 匹配 0 次或 1 次 |
{n} |
精确匹配 n 次 |
{n,} |
匹配至少 n 次 |
{n,m} |
匹配 n 到 m 次(包含 n 和 m) |
示例:
a* 匹配 ""、"a"、"aa"、"aaa" 等
a{2,3} 匹配 "aa" 或 "aaa"
\d+ 匹配 "1"、"123" 等任意长度数字
四、贪婪与非贪婪模式
贪婪模式(默认):量词尽可能匹配更多字符(如 a.*b 匹配 "aXXbXXb" 中的 "aXXbXXb")
非贪婪模式:量词后加 ?,尽可能匹配更少字符(如 a.*?b 匹配 "aXXbXXb" 中的 "aXXb")
五、位置匹配(锚点)
匹配字符串的位置,而非具体字符:
| 符号 | 含义 |
|---|---|
^ |
匹配字符串开头(多行模式下匹配行首) |
$ |
匹配字符串结尾(多行模式下匹配行尾) |
\b |
匹配单词边界(如 \bcat\b 匹配 "cat",不匹配 "category") |
\B |
匹配非单词边界 |
示例:
^abc 匹配以 "abc" 开头的字符串
abc$ 匹配以 "abc" 结尾的字符串
^\d+$ 匹配纯数字字符串(从头到尾都是数字)
六、分组与捕获
分组 ( )
将多个字符视为一个整体,可结合量词使用:
(ab)+ 匹配 "ab"、"abab"、"ababab" 等
(a|b) 匹配 "a" 或 "b"(| 表示 “或”)
捕获分组
分组会 “捕获” 匹配的内容,可用于后续引用(如替换、提取):
示例:(\d{4})-(\d{2})-(\d{2}) 匹配日期格式,分组 1 是年,分组 2 是月,分组 3 是日
引用方式:在替换中用 $1、$2 等(如 JavaScript 中 "2023-10-01".replace(/(\d{4})-(\d{2})-(\d{2})/, "$2/$3/$1") 结果为 "10/01/2023")
非捕获分组 (?: )
仅分组,不捕获内容(节省内存):
(?:ab)+ 匹配 "abab" 但不保存分组内容
七、常用示例
匹配邮箱:^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$
匹配手机号(中国大陆):^1[3-9]\d{9}$
匹配 URL:^https?://[^\s]+$
匹配 HTML 标签:<[^>]+>
注意事项
不同语言的正则表达式略有差异(如 JavaScript 不支持 lookbehind,Python 支持更多模式修饰符),需结合具体语言文档。
复杂正则表达式建议通过工具(如 Regex101)测试验证。
掌握这些基础规则后,可组合出强大的模式匹配逻辑,用于文本验证、提取、替换等场景。
浙公网安备 33010602011771号