正则表达式参考 |
简介 |
目录 |
快速参考 |
字符 |
基本功能 |
字符类 |
速记 |
锚点 |
单词边界 |
量词 |
Unicode |
捕获组和反向引用 |
命名组和反向引用 |
特殊组 |
模式修饰符 |
递归和平衡组 |
替换参考 |
字符 |
匹配文本和反向引用 |
上下文和大小写转换 |
条件 |
本网站的其他内容 |
简介 |
正则表达式快速入门 |
正则表达式教程 |
替换字符串教程 |
应用程序和语言 |
正则表达式示例 |
正则表达式参考 |
替换字符串参考 |
书籍评论 |
可打印 PDF |
关于本网站 |
RSS 提要和博客 |
功能 | 语法 | 说明 | 示例 | 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 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
平衡组 | (?<capture-subtract>regex) 其中“capture”和“subtract”是组名称,“regex”是任意正则表达式 | “减去”必须用作 regex 中其他位置的捕获组的名称。如果此组已捕获尚未减去的匹配项,则平衡组将从“减去”中减去一个捕获项,尝试匹配“regex”,并将匹配项存储到组“捕获”中。如果省略“捕获”,则会发生相同的情况,但不会存储匹配项。如果省略“regex”,则平衡组将成功匹配,而无需遍历字符串。如果组“减去”没有要减去的匹配项,则平衡组将无法匹配,无论是否指定“regex”。 | ^(?<l>\w)+\w? (\k<l>(?<-l>))+ (?(l)(?!))$ 匹配任何回文词 |
V2 | YES | no | no | no | no | no | no | no | no | no | no | no | no | no | no | no | no | no | no | no | no | no | no |
平衡组 | (?'capture-subtract'regex) 其中“capture”和“subtract”是组名称,“regex”是任何 regex | “减去”必须用作 regex 中其他位置的捕获组的名称。如果此组已捕获尚未减去的匹配项,则平衡组将从“减去”中减去一个捕获项,尝试匹配“regex”,并将匹配项存储到组“捕获”中。如果省略“捕获”,则会发生相同的情况,但不会存储匹配项。如果省略“regex”,则平衡组将成功匹配,而无需遍历字符串。如果组“减去”没有要减去的匹配项,则平衡组将无法匹配,无论是否指定“regex”。 | ^(?'l'\w)+\w? (\k'l'(?'-l'))+ (?(l)(?!))$ 匹配任何回文词 |
V2 | YES | no | no | no | no | no | no | no | no | no | no | no | no | no | no | no | no | no | no | no | no | no | no |
递归 | (?R) | 整个正则表达式的递归。 | a(?R)?z 匹配 az、aazz、aaazzz 等。 | V2 | no | no | 5.10 | YES | YES | YES | YES | YES | no | no | no | no | no | no | ECMA 1.42–1.83 | no | no | no | no | no | no | no | no |
递归 | (?0) | 整个正则表达式的递归。 | a(?0)?z 匹配 az、aazz、aaazzz 等。 | V2 | no | no | 5.10 | YES | YES | YES | YES | YES | no | no | no | no | no | no | ECMA 1.42–1.83 | no | no | no | no | no | no | no | no |
递归 | \g<0> | 整个正则表达式的递归。 | a\g<0>?z 匹配 az、aazz、aaazzz 等。 | V2 | no | no | no | 7.7 | YES | 5.2.7 | YES | YES | no | no | no | no | 2.0 | no | no | no | no | no | no | no | no | no | no |
递归 | \g'0' | 整个正则表达式的递归。 | a\g'0'?z 匹配 az、aazz、aaazzz 等。 | V2 | no | no | no | 7.7 | YES | 5.2.7 | YES | YES | no | no | no | no | 2.0 | no | no | no | no | no | no | no | no | no | no |
子例程调用 | (?1),其中 1 是捕获组的编号 | 捕获组的递归或子例程调用到捕获组。 | a(b(?1)?y)z 匹配 abyz、abbyyz、abbbyyyz 等。 | V2 | no | 仅 4 | 5.10 | YES | YES | YES | YES | YES | no | no | no | no | no | no | ECMA 1.42–1.83 | no | no | no | no | no | no | no | no |
子例程调用 | \g<1>,其中 1 是捕获组的编号 | 捕获组的递归或子例程调用到捕获组。 | a(b\g<1>?y)z 匹配 abyz、abbyyz、abbbyyyz 等。 | V2 | no | no | no | 7.7 | YES | 5.2.7 | YES | YES | no | no | no | no | 1.9 | no | no | no | no | no | no | no | no | no | no |
子例程调用 | \g'1',其中 1 是捕获组的编号 | 捕获组的递归或子例程调用到捕获组。 | a(b\g'1'?y)z 匹配 abyz、abbyyz、abbbyyyz 等。 | V2 | no | no | no | 7.7 | YES | 5.2.7 | YES | YES | no | no | no | no | 1.9 | no | no | no | no | no | no | no | no | no | no |
相对子例程调用 | (?-1),其中 -1 是负整数 | 递归或子例程调用到捕获组,可以通过从右向左从子例程调用开始计算指定数量的命名或编号捕获组的左括号来找到该捕获组。 | a(b(?-1)?y)z 匹配 abyz、abbyyz、abbbyyyz 等。 | V2 | no | no | 5.10 | 7.2 | YES | 5.2.4 | YES | YES | no | no | no | no | no | no | ECMA 1.42–1.83 | no | no | no | no | no | no | no | no |
相对子例程调用 | \g<-1>,其中 -1 是负整数 | 递归或子例程调用到捕获组,可以通过从右向左从子例程调用开始计算指定数量的命名或编号捕获组的左括号来找到该捕获组。 | a(b\g<-1>?y)z 匹配 abyz、abbyyz、abbbyyyz 等。 | V2 | no | no | no | 7.7 | YES | 5.2.7 | YES | YES | no | no | no | no | 1.9 | no | no | no | no | no | no | no | no | no | no |
相对子例程调用 | \g'-1',其中 -1 是负整数 | 递归或子例程调用到捕获组,可以通过从右向左从子例程调用开始计算指定数量的命名或编号捕获组的左括号来找到该捕获组。 | a(b\g'-1'?y)z 匹配 abyz、abbyyz、abbbyyyz 等。 | V2 | no | no | no | 7.7 | YES | 5.2.7 | YES | YES | no | no | no | no | 1.9 | no | no | no | no | no | no | no | no | no | no |
前向子例程调用 | (?+1),其中 +1 是正整数 | 递归或子例程调用到捕获组,可以通过从左到右从子例程调用开始按指定数字计算命名或编号捕获组的左括号数量来找到。 | (?+1)x([ab]) 匹配 axa、axb、bxa 和 bxb | V2 | no | no | 5.10 | 7.2 | YES | 5.2.4 | YES | YES | no | no | no | no | no | no | ECMA 1.42–1.83 | no | no | no | no | no | no | no | no |
前向子例程调用 | \g<+1>,其中 +1 是正整数 | 递归或子例程调用到捕获组,可以通过从左到右从子例程调用开始按指定数字计算命名或编号捕获组的左括号数量来找到。 | \g<+1>x([ab]) 匹配 axa、axb、bxa 和 bxb | V2 | no | no | no | 7.7 | YES | 5.2.7 | YES | YES | no | no | no | no | 2.0 | no | no | no | no | no | no | no | no | no | no |
前向子例程调用 | \g'+1',其中 +1 是正整数 | 递归或子例程调用到捕获组,可以通过从左到右从子例程调用开始按指定数字计算命名或编号捕获组的左括号数量来找到。 | \g'+1'x([ab]) 匹配 axa、axb、bxa 和 bxb | V2 | no | no | no | 7.7 | YES | 5.2.7 | YES | YES | no | no | no | no | 2.0 | no | no | no | no | no | no | no | no | no | no |
命名子例程调用 | (?&name),其中“name”是捕获组的名称 | 捕获组的递归或子例程调用到捕获组。 | a(?<x>b(?&x)?y)z 匹配 abyz、abbyyz、abbbyyyz 等。 | V2 | no | no | 5.10 | 7.0 | YES | 5.2.2 | YES | YES | no | no | no | no | no | no | ECMA 1.42–1.83 | no | no | no | no | no | no | no | no |
命名子例程调用 | (?P>name),其中“name”是捕获组的名称 | 捕获组的递归或子例程调用到捕获组。 | a(?P<x>b(?P>x)?y)z 匹配 abyz、abbyyz、abbbyyyz 等。 | V2 | no | no | 5.10 | YES | YES | YES | YES | YES | no | no | no | no | no | no | ECMA 1.42–1.83 | no | no | no | no | no | no | no | no |
命名子例程调用 | \g<name>,其中“name”是捕获组的名称 | 捕获组的递归或子例程调用到捕获组。 | a(?<x>b\g<x>?y)z 匹配 abyz、abbyyz、abbbyyyz 等。 | V2 | no | no | no | 7.7 | YES | 5.2.7 | YES | YES | no | no | no | no | 1.9 | no | no | no | no | no | no | no | no | no | no |
命名子例程调用 | \g'name',其中“name”是捕获组的名称 | 捕获组的递归或子例程调用到捕获组。 | a(?'x'b\g'x'?y)z 匹配 abyz、abbyyz、abbbyyyz 等。 | V2 | no | no | no | 7.7 | YES | 5.2.7 | YES | YES | no | no | no | no | 1.9 | no | no | no | no | no | no | no | no | no | no |
子例程定义 | (?(DEFINE)regex),其中“regex”是任意正则表达式 | DEFINE 组不参与匹配过程。可以在 DEFINE 组内对捕获组进行子例程调用。 | (?(DEFINE)([ab])) x(?1)y(?1)z 匹配 xayaz、xaybz、xbyaz 和 xbybz |
V2 | no | no | 5.10 | 7.0 | YES | 5.2.2 | YES | YES | no | no | no | no | no | no | ECMA 1.42–1.83 | no | no | no | no | no | no | no | no |
子例程调用捕获 | 使用 Ruby 风格 \g 语法的子例程调用 | 对捕获组的子例程调用会让该捕获组存储子例程调用期间匹配的文本。 | 当 ([ab])\g'1' 匹配 ab 时,匹配后第一个捕获组保存 b。 | V2 | 不适用 | 不适用 | 不适用 | no | no | no | no | no | 不适用 | 不适用 | 不适用 | 不适用 | 1.9 | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 |
子例程调用捕获 | 使用非 \g 语法的子例程调用 | 对捕获组的子例程调用会让该捕获组存储子例程调用期间匹配的文本。 | 当 ([ab])(?1) 匹配 ab 时,匹配后第一个捕获组保存 b。 | no | 不适用 | no | no | no | no | no | no | no | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 | no | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 |
递归隔离捕获组 | 任何递归或子例程调用 | 每个子例程调用都有自己独立的捕获组存储空间。调用中的反向引用无法看到调用之前匹配的文本,调用之后的反向引用无法看到调用中匹配的文本。递归中的反向引用无法看到其他递归级别匹配的文本。 | (a)(\1)(?2) 永远不会匹配任何内容,因为 \1 始终在 (?2) 进行的调用中失败。 | no | 不适用 | no | 5.10–5.18 | no | no | no | no | no | 不适用 | 不适用 | 不适用 | 不适用 | no | 不适用 | no | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 |
递归恢复捕获组 | 使用 Ruby 风格 \g 语法的递归或子例程调用 | 当正则表达式引擎退出递归或子例程调用时,它会将所有捕获组恢复到进入递归或子例程调用之前匹配的文本。 | 当 (a)(([bc])\1)\g'2' 匹配 abaca 时,匹配后第三组存储 b | no | 不适用 | 不适用 | 不适用 | 7.7 | YES | 5.2.7 | YES | YES | 不适用 | 不适用 | 不适用 | 不适用 | no | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 |
递归恢复捕获组 | 使用除 \g 之外的语法进行递归或子例程调用 | 当正则表达式引擎退出递归或子例程调用时,它会将所有捕获组恢复到进入递归或子例程调用之前匹配的文本。 | 当 (a)(([bc])\1)(?2) 匹配 abaca 时,匹配后第三组存储 b | V2 | 不适用 | no | 5.10 | YES | YES | YES | YES | YES | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 | ECMA 1.42–1.83 | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 |
递归不会隔离或恢复捕获组 | 使用 Ruby 风格 \g 语法的递归或子例程调用 | 递归和子例程调用不会对捕获组进行任何特殊处理,除了子例程调用可能会捕获。反向引用始终查看每个捕获组最近匹配的文本,无论它们是否在同一级别的递归中。 | 当 (a)(([bc])\1)\g'2' 匹配 abaca 时,匹配后第三组存储 c | V2 | 不适用 | 不适用 | 不适用 | no | no | no | no | no | 不适用 | 不适用 | 不适用 | 不适用 | 1.9 | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 |
递归不会隔离或恢复捕获组 | 使用除 \g 之外的语法进行递归或子例程调用 | 递归和子例程调用不会对捕获组进行任何特殊处理,除了子例程调用可能会捕获。反向引用始终查看每个捕获组最近匹配的文本,无论它们是否在同一级别的递归中。 | 当 (a)(([bc])\1)(?2) 匹配 abaca 时,匹配后第三组存储 c | no | 不适用 | 仅 4 | no | no | no | no | no | no | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 | no | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 |
递归是原子的 | 使用 (?P>…) 进行递归或子例程调用 | 递归和子例程调用是原子的。一旦正则表达式引擎退出它们,它不会回溯到其中尝试递归或子例程调用的不同排列。 | (a+)(?P>1)(?P>1) 永远无法匹配任何内容,因为第一个 (?P>1) 匹配所有剩余的 a,当第二个失败时,正则表达式引擎不会回溯到第一个 (?P>1) | V2 | 不适用 | 不适用 | no | 6.5 | 10.00–10.23 | 5.1.3–7.2.34 | YES | 2.14.0–3.6.3 | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 | no | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 |
递归是原子的 | 使用除 (?P>0) 之外的语法对整个正则表达式进行递归 | 整个正则表达式的递归是原子的。一旦正则表达式引擎退出递归,它将不会回溯到其中尝试递归的不同排列。 | aa$|a(?R)a|a 在递归为原子时匹配 aaa 中的 a;否则它将匹配整个字符串。 | no | 不适用 | 不适用 | no | 6.5 | YES | 5.1.3–7.2.34 | YES | YES | 不适用 | 不适用 | 不适用 | 不适用 | no | 不适用 | ECMA 1.42–1.83 | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 |
递归是原子的 | 使用 (?P>…) 以外的语法调用子例程 | 子例程调用是原子的。一旦正则表达式引擎退出它们,它将不会回溯到其中尝试子例程调用的不同排列。 | (a+)(?1)(?1) 永远无法匹配任何内容,因为第一个 (?1) 匹配所有剩余的 a,而当第二个失败时,正则表达式引擎不会回溯到第一个 (?1) | no | 不适用 | 仅 4 | no | 6.5 | 10.00–10.23 | 5.1.3–7.2.34 | YES | 2.14.0–3.6.3 | 不适用 | 不适用 | 不适用 | 不适用 | no | 不适用 | no | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 |
功能 | 语法 | 说明 | 示例 | 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 |
| 快速入门 | 教程 | 工具和语言 | 示例 | 参考 | 书评 |
| 简介 | 目录 | 快速参考 | 字符 | 基本功能 | 字符类 | 简写 | 锚点 | 词边界 | 量词 | Unicode | 捕获组和反向引用 | 命名组和反向引用 | 特殊组 | 模式修饰符 | 递归和平衡组 |
| 字符 | 匹配的文本和反向引用 | 上下文和大小写转换 | 条件 |
页面 URL:https://regexper.cn/refrecurse.html
页面最后更新时间:2023 年 10 月 16 日
网站最后更新时间:2024 年 3 月 15 日
版权所有 © 2003-2024 Jan Goyvaerts。保留所有权利。