正则表达式入门
基本元字符
| 写法 | 含义 |
|---|---|
. | 除换行外任意一个字符 |
\d / \w / \s | 数字 / 字母数字下划线 / 空白 |
[abc] / [^abc] | 其中一个 / 不是其中任何一个 |
^ / $ | 开头 / 结尾 |
\b | 单词边界 |
数量
*零次或多次,+一次或多次,?零次或一次{3}正好三次,{2,5}二到五次,{2,}至少两次
贪婪与非贪婪
默认是贪婪的,尽量多匹配。在数量词后面加 ? 变成尽量少匹配。
文本:<b>一</b>和<b>二</b>
<b>.*</b> 匹配整段
<b>.*?</b> 分别匹配 <b>一</b> 和 <b>二</b>
分组
(...)捕获分组,替换时用$1或\1引用(?:...)只分组不捕获(?<year>\d{4})命名分组,读起来更清楚
把 2026-08-15 改成 15/08/2026:
查找 (\d{4})-(\d{2})-(\d{2})
替换 $3/$2/$1
环视
只判断前后是什么,不把它算进匹配结果:
(?=...)后面是,(?!...)后面不是(?<=...)前面是,(?<!...)前面不是
例:\d+(?=元) 只取“元”前面的数字。
几点体会
- 写完拿各种边界情况测一遍,在线工具能逐步显示匹配过程
- 太长的正则不如拆成几步,或者直接写代码解析
- 不同语言的支持程度不一样,尤其是环视和命名分组