正则表达式(?<n> a)(b)\ 2(c)匹配什么?</n>

时间:2010-11-30 02:43:38

标签: .net regex

这个正则表达式匹配什么?

(?<n>a)(b)\2(c)

它与abcabacabbcabccab\x02c不匹配,并且不会引发异常。


如果您取消(c),则匹配aba。我的理解是,未命名的捕获首先编号,然后命名捕获。所以(c)应该得到2,除了我尝试在它定义之前对它进行反向引用,所以我想也许它会匹配aa会在它到达时{{1}重新编号但是,情况似乎也不是这样。

3 个答案:

答案 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并计数。非捕获括号未编号。所以,它无法匹敌。

Regular-Expressions.info on Brackets

答案 2 :(得分:1)

您的正则表达式中的

\2指的是(c)组,正如您的实验所示。可悲的是,你的正则表达式永远不会匹配。

您可以在documentation 中找到参考(虽然它不太清楚,似乎后面跟着一个不相关的例子)

  

如果某个组未捕获任何子字符串,则该组的反向引用未定义且永远不会匹配。