正则表达式汇总

概要

这是一个可安全移植、实用导向的正则表达式参考手册。
不使用标志语法(如 (?s)(?m)(?i),仅列出在不同操作系统与工具中稳定可用的模式


换行代码与系统差异

操作系统 换行符 推荐模式 说明
Windows \r\n \r?\n 同时兼容 CRLF 与 LF
macOS / Linux \n \r?\n 自动兼容

要点:

  • 检测或替换换行符时统一使用 \r?\n,适用于所有平台。
  • 匹配跨行内容时,应使用 (?:.|\r|\n)(因为. 默认不匹配换行)。

Part 1:基础语法(分类速查)

1-1. 字符类与范围

模式 含义 输入 匹配
. 任意1个非换行字符 a.c / abc abc
[abc] 匹配 a、b、c 中任意一个 bag a
[^0-9] 匹配非数字 a1 a
[A-Z0-9] 大写字母或数字 X8z X,8

1-2. 数量限定符

模式 含义 输入 匹配
* 重复0次或多次 goooogle goooo
+ 重复1次或多次 google oo
? 0次或1次 color colour 两者均匹配
{n} 精确重复n次 a{3} / aaa aaa
{n,} 重复n次或更多 a{2,} / aaaa aaaa
{n,m} 重复n到m次 a{2,4} / aaaaa aaaa

1-3. 位置锚点

模式 含义 输入 匹配
^abc 行首的abc abc\nzabc 第一行
abc$ 行末的abc zabc\nabc 两行末尾
\bword\b 单词边界的word word words word
\Bing 非单词边界的ing ringing 后半 ing

1-4. 常用转义字符

模式 含义 输入 匹配
\d 数字 [0-9] ver2.10 2,10
\D 非数字 a1 a
\w 字母、数字、下划线 a_b-1 a_b
\W 非字母数字 a# #
\s 空白字符(空格/制表符/换行) a b 中间空格
\S 非空白 a b a,b
\t 制表符 a\tb 匹配制表符

1-5. 特殊符号与转义

模式 含义 输入 匹配
\. 字面点号 a.c a.c
\* 星号本身 a*b a*b
\+ 加号 a+b a+b
\? 问号 what? what?
\( \) 小括号 (test) (test)
| 竖线 `a b`
\\ 反斜杠 C:\\path \\
\^ 脱字符 ^abc ^abc
\$ 美元符 total$ $
\[ \] 中括号 [abc] [abc]
\{ \} 花括号 {a,b} {a,b}

Part 2:分组、分支与前后预查

模式 功能 输入 匹配
(abc)+ 组重复 abcabcx abcabc
`(?:jpg png)` 非捕获分组 file.png
`foo bar` 或条件 bar
\d+(?=円) 匹配“円”前的数字 合計100円 100
^(?!.*error).* 不含“error”的行 ok\nerror ok
(?<=¥)\d+ “¥”后的数字 ¥300 300
(?<!Mr\.)\s[A-Z] 不在 Mr. 后的大写字母 Ms. Alice A

Part 3:跨行匹配示例

用途 模式 输入 匹配
HTML 块 `<div>(?:. \r \n)*?</div>`
日志块(含时间) `^[\d{4}-\d{2}-\d{2} [\d:]+](?:. \r \n)*?(?=^[\d{4}-\d{2}-\d{2}
Markdown 代码块 “ “`(?:. \r \n)*?“` “
多行注释 `/*(?:. \r \n)*?*/`

Part 4:常用模式(否定与抽取)

用途 模式 输入 匹配
仅数字 ^\d+$ 123 123
仅字母数字 ^[A-Za-z0-9]+$ user01 user01
邮箱(简化版) ^[\w.-]+@[\w.-]+\.[A-Za-z]{2,}$ a@b.com a@b.com
URL https?://[\w.-]+\.[A-Za-z]{2,}(/[\w./?=&%-]*)? https://ex.com/a 整体
ISO 日期 \d{4}-\d{2}-\d{2} 2025-10-30 2025-10-30
国际电话 \+\d{1,3}[\s-]?\d{1,14} +81 90 1234 5678 整体
强密码 ^(?=.*[a-z])(?=.*[A-Z])(?=.*\d).{8,}$ Abcd1234 整体
HTML 注释 `<!–(?:. \r \n)*?–>`
不含 error 的行 ^(?!.*error).* ok\nerror ok

Part 5:替换示例

任务 模式 替换 输入 输出
交换单词顺序 (\w+)\s+(\w+) ${2} ${1} John Doe Doe John
替换分隔符 ; , a;b;c a,b,c
合并多空格 \s{2,} a b a b
删除HTML标签 <[^>]+> <p>a</p> a
去除首尾空格 `^\s+ \s+$` a
换行转空格 \r?\n a\nb a b
删除行尾注释 //.*$ x=1;//note x=1;
日期格式统一 (\d{4})/(\d{2})/(\d{2}) ${1}-${2}-${3} 2025/10/30 2025-10-30
压缩重复行 ^(.*)(\r?\n\1)+$ ${1} 重复行 单行

总结

正则表达式是一种强大的文本处理工具,可在多语言、多平台环境中使用。
无论是日志分析、数据清洗还是代码解析,掌握无标志位安全模式能显著提升可移植性与可靠性。