澄清一下,我想匹配:
AB
AABB
aaabbb
...
这适用于Perl:
if ($exp =~ /^(a(?1)?b)$/)
要理解这一点,请查看字符串,就好像它从外向内增长,而不是从左右增长:
AB
一个(AB)b
AA(AB)BB
(?1)
是对外部括号的引用。我们之后需要?
用于最后一种情况(从外面进入),没有留下任何内容,?
表示前面表达式的0或1(所以它基本上充当我们的基本情况)。
我发布了一个类似的问题,询问Java中的等价(?1)
是什么?今天我发现\\1
指的是第一个捕获组。所以,我认为这样可行:
String pattern = "^(a(?:\\1)?b)$";
但事实并非如此。有谁知道为什么?
注意:我知道还有其他更好的方法可以做到这一点。这绝对是一个教育问题。正如我想知道为什么这种特殊方式不起作用,以及是否有办法解决它。
答案 0 :(得分:1)
\\1
是一个反向引用,指的是组的值,而不是递归(?1)
在Perl中的模式。不幸的是,Java正则表达式不支持递归,但可以使用lookarounds和backrefs表示模式。