正则表达式*
比通配符更复杂的匹配工具
| 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