为了澄清,我想匹配:
ab
aabb
aaabbb
...
这在 Perl 中有效:
if ($exp =~ /^(a(?1)?b)$/)
要理解这一点,请查看字符串,就好像它是从外向内生长的,而不是从左向右生长的:
ab
a(ab)b
aa(ab)bb
(?1)
是对外部括号集的引用。?
对于最后一种情况(从外到内),我们需要after,什么都没有,并且?
表示前面表达式的 0 或 1(所以它本质上是我们的基本情况)。
我发布了一个类似的问题,询问(?1)
Java 中的等价物是什么?今天才知道\\1
是指第一个捕获组。所以,我认为这会起作用:
String pattern = "^(a(?:\\1)?b)$";
但它没有。有谁知道为什么?
注意:我知道还有其他更好的方法可以做到这一点。这严格来说是一个教育问题。正如我想知道为什么这种特殊方式不起作用以及是否有办法解决它。