正则表达式参考 |
简介 |
目录 |
快速参考 |
字符 |
基本功能 |
字符类 |
简写 |
锚点 |
词边界 |
量词 |
Unicode |
捕获组和反向引用 |
命名组和反向引用 |
特殊组 |
模式修饰符 |
递归和平衡组 |
替换参考 |
字符 |
匹配的文本和反向引用 |
上下文和大小写转换 |
条件 |
本网站的更多内容 |
简介 |
正则表达式快速入门 |
正则表达式教程 |
替换字符串教程 |
应用程序和语言 |
正则表达式示例 |
正则表达式参考 |
替换字符串参考 |
书评 |
可打印 PDF |
关于本网站 |
RSS Feed 和博客 |
功能 | 语法 | 说明 | 示例 | JGsoft | .NET | Java | Perl | PCRE | PCRE2 | PHP | Delphi | R | JavaScript | VBScript | XRegExp | Python | Ruby | std::regex | Boost | Tcl ARE | POSIX BRE | POSIX ERE | GNU BRE | GNU ERE | Oracle | XML | XPath |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
注释 | (?#comment) | (?# 和 ) 之间的所有内容都将被正则表达式引擎忽略。 | a(?#foobar)b 匹配 ab | 是 | 是 | 否 | 是 | 是 | 是 | 是 | 是 | 是 | 否 | 否 | 是 | 是 | 是 | 否 | ECMA | 是 | 否 | 否 | 否 | 否 | 否 | 否 | 否 |
分支重置组 | (?|regex) | 如果分支重置组内的正则表达式具有多个带有捕获组的备选方案,则所有备选方案中的捕获组编号相同。 | (x)(?|(a)|(bc)|(def))\2 匹配 xaa、xbcbc 或 xdefdef,其中第一个组捕获 x,第二个组捕获 a、bc 或 def | V2 | 否 | 否 | 5.10 | 7.2 | 是 | 5.2.4 | 是 | 是 | 否 | 否 | 否 | 否 | 否 | 否 | ECMA 1.42–1.83 | 否 | 否 | 否 | 否 | 否 | 否 | 否 | 否 |
原子组 | (?>regex) | 原子组防止正则表达式引擎在为该组找到匹配项后回溯到该组中。如果正则表达式的其余部分失败,如果量词或交替使其成为可选的,则引擎可能会回溯该组。但它不会回溯到该组中尝试该组的其他排列。 | a(?>bc|b)c 匹配 abcc,但不匹配 abc | 是 | 是 | 是 | 是 | 是 | 是 | 是 | 是 | 是 | 否 | 否 | 否 | 否 | 是 | 否 | ECMA | 否 | 否 | 否 | 否 | 否 | 否 | 否 | 否 |
正向先行断言 | (?=regex) | 在先行断言内部的模式可以匹配的位置进行匹配。仅匹配位置。它不消耗任何字符或扩展匹配项。在 one(?=two)three 这样的模式中,two 和 three 都必须在 one 的匹配项结束的位置匹配。 | t(?=s) 匹配 streets 中的第二个 t。 | 是 | 是 | 是 | 是 | 是 | 是 | 是 | 是 | 是 | 是 | 是 | 是 | 是 | 是 | ECMA | ECMA | 是 | 否 | 否 | 否 | 否 | 否 | 否 | 否 |
负向先行断言 | (?!regex) | 与正向先行断言类似,但仅当先行断言内部的正则表达式无法匹配时,负向先行断言才成功。 | t(?!s) 匹配 streets 中的第一个 t。 | 是 | 是 | 是 | 是 | 是 | 是 | 是 | 是 | 是 | 是 | 是 | 是 | 是 | 是 | ECMA | ECMA | 是 | 否 | 否 | 否 | 否 | 否 | 否 | 否 |
正向后行断言 | (?<=regex) | 如果后行断言内部的模式可以匹配并在此位置结束,则在此位置进行匹配。 | (?<=s)t 匹配 streets 中的第一个 t。 | 是 | 是 | 是 | 是 | 是 | 是 | 是 | 是 | 是 | 是 | 否 | 是 | 是 | 1.9 | 否 | ECMA | 否 | 否 | 否 | 否 | 否 | 否 | 否 | 否 |
负向后行断言 | (?<!regex) | 如果后行断言内部的模式无法匹配并在此位置结束,则在此位置进行匹配。 | (?<!s)t 匹配 streets 中的第二个 t。 | 是 | 是 | 是 | 是 | 是 | 是 | 是 | 是 | 是 | 是 | 否 | 是 | 是 | 1.9 | 否 | ECMA | 否 | 否 | 否 | 否 | 否 | 否 | 否 | 否 |
后向引用 | (?<=regex|longer regex) | 后向引用中的备选方案长度可以不同。 | (?<=is|e)t 匹配 twisty streets 中的第二个和第四个 t。 | 是 | 是 | 是 | 5.30 | 是 | 是 | 是 | 是 | 是 | 是 | n/a | 是 | 否 | 1.9 | n/a | ECMA 1.38–1.43 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
后向引用 | (?<=x{n,m}) | 具有有限最大重复次数的量词可以在后向引用中使用。 | (?<=s\w{1,7})t 仅匹配 twisty streets 中的第四个 t。 | 是 | 是 | 6 4 fail | 5.30 fail | 否 | 否 | 否 | 否 | 否 | 是 | n/a | 是 | 否 | 否 | n/a | 否 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
后向引用 | (?<=regex) | 可以在后向引用中使用完整的正则表达式语法。 | (?<=s\w+)t 仅匹配 twisty streets 中的第四个 t。 | 是 | 是 | 13 | 否 | 否 | 否 | 否 | 否 | 否 | 是 | n/a | 是 | 否 | 否 | n/a | 否 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
后向引用 | (group)(?<=\1) | 反向引用可以在后向引用中使用。在后向引用中禁止的语法也在引用的捕获组中禁止。 | (\w).+(?<=\1) 匹配 twisty streets 中的 twisty street。 | 是 | 是 | 否 | 否 | 否 | 10.23 | 7.3.0 | 否 | 4.0.0 | 是 | n/a | 是 | 3.5 | 否 | n/a | 否 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
将文本保留在正则表达式匹配之外 | \K | 与 \K 左侧的正则表达式部分匹配的文本从整体正则表达式匹配中省略。除此之外,正则表达式通常从左到右匹配。位于 \K 左侧的捕获组照常捕获。 | st 仅匹配 streets 中的第一个 t。 | V2 | 否 | 否 | 5.10 | 7.2 | 是 | 5.2.4 | 是 | 是 | 否 | 否 | 否 | 否 | 2.0 | 否 | ECMA 1.42–1.83 | 否 | 否 | 否 | 否 | 否 | 否 | 否 | 否 |
环视条件 | (?(?=regex)then|else) 其中 (?=regex) 是任何有效的环视,then 和 else 是任何有效的正则表达式 | 如果环视成功,则“then”部分必须匹配才能使整体正则表达式匹配。如果环视失败,则“else”部分必须匹配才能使整体正则表达式匹配。环视是零长度的。“then”和“else”部分像普通正则表达式一样使用它们的匹配。 | (?(?<=a)b|c) 匹配 babxcac 中的第二个 b 和第一个 c | 是 | 是 | 否 | 是 | 是 | 是 | 是 | 是 | 是 | 否 | 否 | 否 | 否 | 否 | 否 | ECMA | 否 | 否 | 否 | 否 | 否 | 否 | 否 | 否 |
隐式前瞻条件 | (?(regex)then|else) 其中 regex、then 和 else 是任何有效的正则表达式,并且 regex 不是捕获组的名称 | 如果“regex”不是捕获组的名称,则将其解释为前瞻,就像您编写了 (?(?=regex)then|else) 一样。如果前瞻成功,则“then”部分必须匹配才能使整体正则表达式匹配。如果前瞻失败,则“else”部分必须匹配才能使整体正则表达式匹配。环视的长度为零。“then”和“else”部分会像普通正则表达式一样消耗它们的匹配项。 | (?(\d{2})7|c) 匹配 747c 中的第一个 7 和 c | 否 | 是 | 否 | 否 | 否 | 否 | 否 | 否 | 否 | 否 | 否 | 否 | 否 | 否 | 否 | 否 | 否 | 否 | 否 | 否 | 否 | 否 | 否 | 否 |
命名条件 | (?(name)then|else) 其中 name 是捕获组的名称,then 和 else 是任何有效的正则表达式 | 如果具有给定名称的捕获组参与了迄今为止的匹配尝试,则“then”部分必须匹配才能使整体正则表达式匹配。如果捕获组迄今为止未参与匹配,则“else”部分必须匹配才能使整体正则表达式匹配。 | (?<one>a)?(?(one)b|c) 匹配 babxcac 中的 ab、第一个 c 和第二个 c | 是 | 是 | 否 | 否 | 6.7 | 是 | 5.2.0 | 是 | 是 | 否 | 否 | 否 | 是 | 否 | 否 | 否 | 否 | 否 | 否 | 否 | 否 | 否 | 否 | 否 |
命名条件 | (?(<name>)then|else) 其中 name 是捕获组的名称,then 和 else 是任何有效的正则表达式 | 如果具有给定名称的捕获组参与了迄今为止的匹配尝试,则“then”部分必须匹配才能使整体正则表达式匹配。如果捕获组迄今为止未参与匹配,则“else”部分必须匹配才能使整体正则表达式匹配。 | (?<one>a)?(?(<one>)b|c) 匹配 babxcac 中的 ab、第一个 c 和第二个 c | V2 | 否 | 否 | 5.10 | 7.0 | 是 | 5.2.2 | 是 | 是 | 否 | 否 | 否 | 否 | 2.0 | 否 | ECMA 1.42–1.83 | 否 | 否 | 否 | 否 | 否 | 否 | 否 | 否 |
命名条件 | (?('name')then|else) 其中 name 是捕获组的名称,then 和 else 是任何有效的正则表达式 | 如果具有给定名称的捕获组参与了迄今为止的匹配尝试,则“then”部分必须匹配才能使整体正则表达式匹配。如果捕获组迄今为止未参与匹配,则“else”部分必须匹配才能使整体正则表达式匹配。 | (?'one'a)?(?('one')b|c) 匹配 babxcac 中的 ab、第一个 c 和第二个 c | V2 | 否 | 否 | 5.10 | 7.0 | 是 | 5.2.2 | 是 | 是 | 否 | 否 | 否 | 否 | 2.0 | 否 | ECMA 1.42–1.83 | 否 | 否 | 否 | 否 | 否 | 否 | 否 | 否 |
条件 | (?(1)then|else) 其中 1 是捕获组的编号,then 和 else 是任何有效的正则表达式 | 如果引用的捕获组到目前为止参与了匹配尝试,则“then”部分必须匹配才能使整体正则表达式匹配。如果捕获组到目前为止未参与匹配,则“else”部分必须匹配才能使整体正则表达式匹配。 | (a)?(?(1)b|c) 匹配 ab、babxcac 中的第一个 c 和第二个 c | 是 | 是 | 否 | 是 | 是 | 是 | 是 | 是 | 是 | 否 | 否 | 否 | 是 | 2.0 | 否 | ECMA | 否 | 否 | 否 | 否 | 否 | 否 | 否 | 否 |
相对条件 | (?(-1)then|else) 其中 -1 是负整数,then 和 else 是任何有效的正则表达式 | 条件,它测试通过从条件正前方从右到左按指定编号计算命名或编号捕获组的左括号数量而找到的捕获组。如果引用的捕获组到目前为止参与了匹配尝试,则“then”部分必须匹配才能使整体正则表达式匹配。如果捕获组到目前为止未参与匹配,则“else”部分必须匹配才能使整体正则表达式匹配。 | (a)?(?(-1)b|c) 匹配 ab、babxcac 中的第一个 c 和第二个 c | V2 | 否 | 否 | 否 | 7.2 | 是 | 5.2.4 | 是 | 是 | 否 | 否 | 否 | 否 | 否 | 否 | 否 | 否 | 否 | 否 | 否 | 否 | 否 | 否 | 否 |
正向条件 | (?(+1)then|else) 其中 +1 是正整数,then 和 else 是任何有效的正则表达式 | 条件,它测试通过从条件的“then”部分开始从左到右按指定编号计算命名或编号捕获组的左括号数量而找到的捕获组。如果引用的捕获组到目前为止参与了匹配尝试,则“then”部分必须匹配才能使整体正则表达式匹配。如果捕获组到目前为止未参与匹配,则“else”部分必须匹配才能使整体正则表达式匹配。 | ((?(+1)b|c)(d)?){2} 匹配 bdbdccxcdcxcdb 中的 cc 和 cdb | V2 | 否 | 否 | 否 | 7.2 | 是 | 5.2.4 | 是 | 是 | 否 | 否 | 否 | 否 | 否 | 否 | 否 | 否 | 否 | 否 | 否 | 否 | 否 | 否 | 否 |
条件 | (?(+1)then|else) 其中 1 是捕获组的编号,then 和 else 是任何有效的正则表达式 | 忽略 +,并将数字视为对捕获组的绝对引用。如果引用的捕获组参与了迄今为止的匹配尝试,则“then”部分必须匹配才能使整体正则表达式匹配。如果捕获组迄今为止未参与匹配,则“else”部分必须匹配才能使整体正则表达式匹配。 | (a)?(?(+1)b|c) 匹配 ab、babxcac 中的第一个 c 和第二个 c | 否 | 否 | 否 | 否 | 否 | 否 | 否 | 否 | 否 | 否 | 否 | 否 | 是 | 否 | 否 | 否 | 否 | 否 | 否 | 否 | 否 | 否 | 否 | 否 |
功能 | 语法 | 说明 | 示例 | JGsoft | .NET | Java | Perl | PCRE | PCRE2 | PHP | Delphi | R | JavaScript | VBScript | XRegExp | Python | Ruby | std::regex | Boost | Tcl ARE | POSIX BRE | POSIX ERE | GNU BRE | GNU ERE | Oracle | XML | XPath |