这个正则表达式匹配什么?
(?<n>a)(b)\2(c)
它与abc
,abac
,abbc
,abcc
或ab\x02c
不匹配,并且不会引发异常。
如果您取消(c)
,则匹配aba
。我的理解是,未命名的捕获首先编号,然后命名捕获。所以(c)
应该得到2,除了我尝试在它定义之前对它进行反向引用,所以我想也许它会匹配a
而a
会在它到达时{{1}重新编号但是,情况似乎也不是这样。
答案 0 :(得分:3)
它与我匹配“abbc”。我正在使用Perl正则表达式风味,我得到“a”作为组1,“b”作为组2,c作为组3. \ 2指的是第二组,即“b”
(?<n>a)
- 一个命名的捕获组:名称为“n”,正则表达式为“a”
(b)\2
- 捕获与“b”匹配的组,然后是对第二组的引用,即“b”
(c)
- 与“c”匹配的第三个捕获组
答案 1 :(得分:2)
a的反向引用是'n'。 b的引用为'1',第三个为'2'
(?<n>a)(b)\1(c) matches abbc where n is a, 1 is b and 2 is c
它将未命名的后向引用编号为1并计数。非捕获括号未编号。所以,它无法匹敌。
答案 2 :(得分:1)
\2
指的是(c)
组,正如您的实验所示。可悲的是,你的正则表达式永远不会匹配。
您可以在documentation 中找到参考(虽然它不太清楚,似乎后面跟着一个不相关的例子) :
如果某个组未捕获任何子字符串,则该组的反向引用未定义且永远不会匹配。