快速入门
教程
工具和语言
示例
参考
书评
正则表达式参考
简介
目录
快速参考
字符
基本功能
字符类
简写
锚点
词边界
量词
Unicode
捕获组和反向引用
命名组和反向引用
特殊组
模式修饰符
递归和平衡组
替换参考
字符
匹配的文本和反向引用
上下文和大小写转换
条件
本网站的更多内容
简介
正则表达式快速入门
正则表达式教程
替换字符串教程
应用程序和语言
正则表达式示例
正则表达式参考
替换字符串参考
书评
可打印 PDF
关于本网站
RSS Feed 和博客
RegexBuddy—Better than a regular expression reference!

正则表达式参考:特殊组

功能语法说明示例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 匹配 xaaxbcbcxdefdef,其中第一个组捕获 x,第二个组捕获 abcdef V25.107.25.2.4ECMA
1.42–1.83
原子组 (?>regex) 原子组防止正则表达式引擎在为该组找到匹配项后回溯到该组中。如果正则表达式的其余部分失败,如果量词或交替使其成为可选的,则引擎可能会回溯该组。但它不会回溯到该组中尝试该组的其他排列。 a(?>bc|b)c 匹配 abcc,但不匹配 abc ECMA
正向先行断言 (?=regex) 在先行断言内部的模式可以匹配的位置进行匹配。仅匹配位置。它不消耗任何字符或扩展匹配项。在 one(?=two)three 这样的模式中,twothree 都必须在 one 的匹配项结束的位置匹配。 t(?=s) 匹配 streets 中的第二个 t ECMAECMA
负向先行断言 (?!regex) 与正向先行断言类似,但仅当先行断言内部的正则表达式无法匹配时,负向先行断言才成功。 t(?!s) 匹配 streets 中的第一个 t ECMAECMA
正向后行断言 (?<=regex) 如果后行断言内部的模式可以匹配并在此位置结束,则在此位置进行匹配。 (?<=s)t 匹配 streets 中的第一个 t 1.9ECMA
负向后行断言 (?<!regex) 如果后行断言内部的模式无法匹配并在此位置结束,则在此位置进行匹配。 (?<!s)t 匹配 streets 中的第二个 t 1.9ECMA
后向引用 (?<=regex|longer regex) 后向引用中的备选方案长度可以不同。 (?<=is|e)t 匹配 twisty streets 中的第二个和第四个 t 5.30n/a1.9n/aECMA
1.38–1.43
n/an/an/an/an/an/an/an/a
后向引用 (?<=x{n,m}) 具有有限最大重复次数的量词可以在后向引用中使用。 (?<=s\w{1,7})t 仅匹配 twisty streets 中的第四个 t 6
4 fail
5.30 failn/an/an/an/an/an/an/an/an/an/a
后向引用 (?<=regex) 可以在后向引用中使用完整的正则表达式语法。 (?<=s\w+)t 仅匹配 twisty streets 中的第四个 t 13n/an/an/an/an/an/an/an/an/an/a
后向引用 (group)(?<=\1) 反向引用可以在后向引用中使用。在后向引用中禁止的语法也在引用的捕获组中禁止。 (\w).+(?<=\1) 匹配 twisty streets 中的 twisty street 10.237.3.04.0.0n/a3.5n/an/an/an/an/an/an/an/an/a
将文本保留在正则表达式匹配之外 \K \K 左侧的正则表达式部分匹配的文本从整体正则表达式匹配中省略。除此之外,正则表达式通常从左到右匹配。位于 \K 左侧的捕获组照常捕获。 s\Kt 仅匹配 streets 中的第一个 t V25.107.25.2.42.0ECMA
1.42–1.83
环视条件 (?(?=regex)then|else) 其中 (?=regex) 是任何有效的环视,thenelse 是任何有效的正则表达式 如果环视成功,则“then”部分必须匹配才能使整体正则表达式匹配。如果环视失败,则“else”部分必须匹配才能使整体正则表达式匹配。环视是零长度的。“then”和“else”部分像普通正则表达式一样使用它们的匹配。 (?(?<=a)b|c) 匹配 babxcac 中的第二个 b 和第一个 c ECMA
隐式前瞻条件 (?(regex)then|else) 其中 regexthenelse 是任何有效的正则表达式,并且 regex 不是捕获组的名称 如果“regex”不是捕获组的名称,则将其解释为前瞻,就像您编写了 (?(?=regex)then|else) 一样。如果前瞻成功,则“then”部分必须匹配才能使整体正则表达式匹配。如果前瞻失败,则“else”部分必须匹配才能使整体正则表达式匹配。环视的长度为零。“then”和“else”部分会像普通正则表达式一样消耗它们的匹配项。 (?(\d{2})7|c) 匹配 747c 中的第一个 7c
命名条件 (?(name)then|else) 其中 name 是捕获组的名称,thenelse 是任何有效的正则表达式 如果具有给定名称的捕获组参与了迄今为止的匹配尝试,则“then”部分必须匹配才能使整体正则表达式匹配。如果捕获组迄今为止未参与匹配,则“else”部分必须匹配才能使整体正则表达式匹配。 (?<one>a)?(?(one)b|c) 匹配 babxcac 中的 ab、第一个 c 和第二个 c 6.75.2.0
命名条件 (?(<name>)then|else) 其中 name 是捕获组的名称,thenelse 是任何有效的正则表达式 如果具有给定名称的捕获组参与了迄今为止的匹配尝试,则“then”部分必须匹配才能使整体正则表达式匹配。如果捕获组迄今为止未参与匹配,则“else”部分必须匹配才能使整体正则表达式匹配。 (?<one>a)?(?(<one>)b|c) 匹配 babxcac 中的 ab、第一个 c 和第二个 c V25.107.05.2.22.0ECMA
1.42–1.83
命名条件 (?('name')then|else) 其中 name 是捕获组的名称,thenelse 是任何有效的正则表达式 如果具有给定名称的捕获组参与了迄今为止的匹配尝试,则“then”部分必须匹配才能使整体正则表达式匹配。如果捕获组迄今为止未参与匹配,则“else”部分必须匹配才能使整体正则表达式匹配。 (?'one'a)?(?('one')b|c) 匹配 babxcac 中的 ab、第一个 c 和第二个 c V25.107.05.2.22.0ECMA
1.42–1.83
条件 (?(1)then|else) 其中 1 是捕获组的编号,thenelse 是任何有效的正则表达式 如果引用的捕获组到目前为止参与了匹配尝试,则“then”部分必须匹配才能使整体正则表达式匹配。如果捕获组到目前为止未参与匹配,则“else”部分必须匹配才能使整体正则表达式匹配。 (a)?(?(1)b|c) 匹配 abbabxcac 中的第一个 c 和第二个 c 2.0ECMA
相对条件 (?(-1)then|else) 其中 -1 是负整数,thenelse 是任何有效的正则表达式 条件,它测试通过从条件正前方从右到左按指定编号计算命名或编号捕获组的左括号数量而找到的捕获组。如果引用的捕获组到目前为止参与了匹配尝试,则“then”部分必须匹配才能使整体正则表达式匹配。如果捕获组到目前为止未参与匹配,则“else”部分必须匹配才能使整体正则表达式匹配。 (a)?(?(-1)b|c) 匹配 abbabxcac 中的第一个 c 和第二个 c V27.25.2.4
正向条件 (?(+1)then|else) 其中 +1 是正整数,thenelse 是任何有效的正则表达式 条件,它测试通过从条件的“then”部分开始从左到右按指定编号计算命名或编号捕获组的左括号数量而找到的捕获组。如果引用的捕获组到目前为止参与了匹配尝试,则“then”部分必须匹配才能使整体正则表达式匹配。如果捕获组到目前为止未参与匹配,则“else”部分必须匹配才能使整体正则表达式匹配。 ((?(+1)b|c)(d)?){2} 匹配 bdbdccxcdcxcdb 中的 cccdb V27.25.2.4
条件 (?(+1)then|else) 其中 1 是捕获组的编号,thenelse 是任何有效的正则表达式 忽略 +,并将数字视为对捕获组的绝对引用。如果引用的捕获组参与了迄今为止的匹配尝试,则“then”部分必须匹配才能使整体正则表达式匹配。如果捕获组迄今为止未参与匹配,则“else”部分必须匹配才能使整体正则表达式匹配。 (a)?(?(+1)b|c) 匹配 abbabxcac 中的第一个 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