Skip to content

正则表达式

正则表达式(Regular Expression)是一种强大的 文本匹配与处理工具,广泛用于字符串搜索、替换、验证等场景。以下是核心符号及其用法:


1. 基本匹配符号

符号说明示例
.匹配 任意单个字符(除换行符 \n"a.c""abc", "a1c"
\转义特殊字符(如 \. 匹配 ."a\.c""a.c"(不匹配 "abc"
[...]匹配 括号内任意一个字符"[aeiou]""a""e"
[^...]匹配 不在括号内的字符"[^0-9]" → 匹配非数字字符
**``** 逻辑(匹配左边或右边)

2. 预定义字符类

符号说明等价写法
\d匹配 数字(0-9)[0-9]
\D匹配 非数字[^0-9]
\w匹配 单词字符(字母、数字、下划线)[a-zA-Z0-9_]
\W匹配 非单词字符[^a-zA-Z0-9_]
\s匹配 空白符(空格、制表符 \t、换行 \n 等)[ \t\n\r\f]
\S匹配 非空白符[^ \t\n\r\f]

3. 量词(控制重复次数)

符号说明示例
*匹配 0 次或多次"a*""""a""aaa"
+匹配 1 次或多次"a+""a""aaa"(不匹配 ""
?匹配 0 次或 1 次"a?""""a"
{n}匹配 恰好 n 次"a{3}""aaa"
{n,}匹配 至少 n 次"a{2,}""aa""aaa"
{n,m}匹配 n 到 m 次"a{2,4}""aa""aaa""aaaa"

4. 锚点(位置匹配)

符号说明示例
^匹配 字符串开头"^abc""abc"(必须在开头)
$匹配 字符串结尾"xyz$""xyz"(必须在结尾)
\b匹配 单词边界"\bcat\b""cat"(不匹配 "category"
\B匹配 非单词边界"\Bcat\B""scatter" 中的 "cat"

5. 分组与捕获

符号说明示例
(...)捕获分组(可提取匹配内容)"(ab)+""abab"(分组 "ab"
(?:...)非捕获分组(不提取内容)"(?:ab)+" → 匹配但不捕获 "ab"
\n引用第 n 个分组(n=1,2,...)"(a)\1""aa"\1 引用 "a"

6. 高级特性

符号说明示例
(?=...)正向先行断言(后面必须匹配)"a(?=b)""a" 后面必须跟 "b"
(?!...)负向先行断言(后面不能匹配)"a(?!b)""a" 后面不能是 "b"
(?<=...)正向后行断言(前面必须匹配)"(?<=a)b""b" 前面必须是 "a"
(?<!...)负向后行断言(前面不能匹配)"(?<!a)b""b" 前面不能是 "a"

7. 常用正则示例

① 匹配邮箱

regex
/^[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,}$/i
  • ^ 开头,$ 结尾。
  • [a-z0-9._%+-]+ 用户名部分(字母、数字、符号)。
  • @ 后接域名(如 example.com)。

② 匹配 URL

regex
/^(https?:\/\/)?([\w.-]+)\.([a-z]{2,})(\/\S*)?$/i
  • https? 匹配 httphttps
  • ([\w.-]+) 域名(如 google.com)。
  • (\/\S*)? 可选路径(如 /path)。

③ 匹配手机号(中国大陆)

regex
/^1[3-9]\d{9}$/
  • 1 开头,第二位 3-9,后面接 9 位数字。

④ 提取 HTML 标签内容

regex
/<div>(.*?)<\/div>/
  • .*? 非贪婪匹配(匹配最短可能内容)。

8. 正则表达式修饰符

修饰符说明示例
i不区分大小写/abc/i"ABC"
g全局匹配(JavaScript/Python 等)/a/g 匹配所有 "a"
m多行模式(^$ 匹配每行)/^abc/m 匹配每行开头的 "abc"
s单行模式(. 匹配换行符 \n/a.b/s"a\nb"

9. 注意事项

  1. 贪婪 vs 非贪婪
    • 默认 贪婪匹配.* 匹配尽可能长的字符串)。
    • 使用 .*? 实现 非贪婪匹配(匹配最短可能)。
  2. 性能优化
    • 避免嵌套量词(如 (a+)+ 可能导致灾难性回溯)。
    • 优先使用具体字符类(如 \d 代替 [0-9])。
  3. 兼容性
    • 不同语言(如 PHP、JavaScript、Python)的正则语法可能略有差异。

滇ICP备2025057983号-1