正则表达式规则

正则表达式(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)测试验证。
掌握这些基础规则后,可组合出强大的模式匹配逻辑,用于文本验证、提取、替换等场景。

posted on 2025-09-10 10:49  emalovecode  阅读(56)  评论(0)    收藏  举报