匹配^ xb ^ x与正则表达式

时间:2013-07-10 00:11:52

标签: java regex perl

澄清一下,我想匹配:

  

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)$";

但事实并非如此。有谁知道为什么?

注意:我知道还有其他更好的方法可以做到这一点。这绝对是一个教育问题。正如我想知道为什么这种特殊方式不起作用,以及是否有办法解决它。

1 个答案:

答案 0 :(得分:1)

\\1是一个反向引用,指的是组的,而不是递归(?1)在Perl中的模式。不幸的是,Java正则表达式不支持递归,但可以使用lookarounds和backrefs表示模式。