跳转至

正则表达式*

比通配符更复杂的匹配工具

Symbol Function
\b, \B 匹配单词边界,非边界的任意位置
\d, \D 匹配数字,反义
\s, \S 匹配任意空白符,反义
\w, \W 匹配字母/数字/下划线/汉字,反义
^, $ 匹配字符串开始和结束
[] 匹配字符集
[^] 匹配字符集外的任一字符
| 分支,注意短路
() 分组
. 匹配任意字符
+, ?, * 连续重复匹配 1 次及以上,0 或 1 次,任意次
{N} 匹配 N 次
{N,} 匹配 N 次及以上
{N, M} 匹配 N 到 M 次

分组捕获的内容可用于后续处理,以下为常见的分组语法:

Syntax Description
(exp) 匹配表达式,自动命名,从左到右分配序号
(?<name>exp) 匹配表达式,捕获到 name
(?:exp) 匹配表达式,不捕获,不分配序号
(?#comment) 注释

零宽断言,用于查找在某些内容(不包括本身)之前或之后的位置。

Syntax Description
(?=exp) 零宽正预测先行断言,断言位置后能匹配 exp,如 \b\w+(?=ing\b) 会匹配以 ing 解为的单词的前 半部分
(?<=exp) 零宽正回顾后发断言,断言位置前能匹配 exp,如 (?<=\bre)\w+\b 会匹配以 re 开头的单词的后半部分
(?!exp) 零宽负预测先行断言,断言位置后不能匹配 exp,如 \d{3}(?!\d) 匹配三位数字,且后面不能是数字
(?<!exp) 零宽负回顾后发断言,断言前不能匹配 exp,如 (?<![a-z])\d{7} 匹配前面不是小写字母的七位数字

正则表达式默认匹配尽可能多的字符,在限定符之后加 ? 匹配尽可能少重复。


最后更新: November 26, 2020