适用范围。 正则语法取决于引擎与标志。Python 字符串模式中的 \d 和 \w 默认包含 Unicode 字符,除非启用 ASCII 模式。Python、JavaScript、Java 与 PCRE 的命名组和后行断言用法有所不同。
匹配字符
| 模式 | 含义 |
|---|---|
[abc] | 匹配a,b,c中的任意一个字符 |
[^abc] | 不匹配a,b,c中的所有字符,“^”只有作为第一个字符出现才有效 |
[a-g] | 匹配a-g范围内的任意一个字符 |
[^a-g] | 不匹配a-g中的所有字符 |
[H-N] | 匹配H-N范围内的任意一个字符 |
[0-9] | 匹配0-9范围内的任意一个字符 |
[a-gH-N] | 匹配a-g,H-N范围内的任意一个字符 |
| 通配符: | |
. | [^\n\r],匹配非换行符 |
\s | space,空白字符,即换行,制表,空格等字符 |
\S | [^\s] |
\d | 数字字符;Unicode 或 ASCII 范围由引擎与标志决定 |
\D | [^\d] |
\w | 单词字符;具体范围由引擎与标志决定 |
\W | [^\w] |
匹配组
| 模式 | 含义 |
|---|---|
(a|b) | 匹配a或b并捕获 |
(...) | 捕获组 |
(?:...) | 非捕获组 |
(?P<name>...) / (?<name>...) | 命名捕获:Python / 现代 JavaScript 与 Java |
(?(condition)true_regex|false_regex) | 条件组(Python / PCRE,不适用于 JavaScript) |
group(0)用于获取整个匹配串的匹配结果,group(n)(n > 0)则可以从整个匹配串的结果中获取子捕获组。
频次范围
| 模式 | 含义 |
|---|---|
{3} | 前面匹配项出现3次,等价于{3,3} |
{3,6} | 前面的匹配项出现3到6次 |
{3,} | 前面的匹配项至少出现3次 |
{0,6} | 前面的匹配项最多出现6次 |
| 通配符: | |
* | {0,} |
+ | {1,} |
? | {0,1} |
\w* | 贪婪模式 |
\w*? | 非贪婪模式 |
定点符
| 模式 | 含义 |
|---|---|
^ | 字符串开始符 |
$ | 字符串结尾符 |
\b | boundary,单词边界 |
\B | 非单词边界 |
| 定点断言 | |
(?=exp) | 向后肯定断言(exp后缀) |
(?<=exp) | 向前肯定断言(exp前缀) |
(?!exp) | 向后否定断言(没有exp后缀) |
(?<!exp) | 向前否定断言(没有exp前缀) |
官方参考
命名组示例:Python 使用 (?P<name>...),现代 JavaScript 和 Java 使用 (?<name>...)。条件组并非所有引擎都支持,JavaScript 不支持该语法。group(0) 是 Python 等引擎的 API,不是正则表达式语法。
Python 命名捕获示例
import re
match = re.fullmatch(r"(?P<word>\w+)", "café")
print(match.group("word")) # café
print(re.fullmatch(r"\w+", "café", flags=re.ASCII)) # None