识别正则表达式模式中的捕获组

时间:2011-01-04 00:25:41

标签: java regex capture-group

Java中是否有一种方法(可能还有一个额外的开源库)来识别java.util.regex.Pattern中的捕获组(即在创建匹配器之前)

来自Java文档的示例:

  

捕获组编号为   算上他们的开头括号   从左到右。在表达中   (例如,(A)(B(C)))   四个这样的团体:

1         ((A)(B(C)))
2         (A)
3         (B(C))
4         (C)

原则上应该可以从(编译)模式中识别这些。

更新: 从@Leniel和eslewhere看来,这个工具(“命名组”)将在2011年中期出现在Java 7中。如果我不能等待,我可以使用jregex虽然我不太确定API是什么。

2 个答案:

答案 0 :(得分:7)

您可以通过创建虚拟匹配器找到组的数字,如下所示:

Pattern p = Pattern.compile("((A)(B(C)))");
System.out.println(p.matcher("").groupCount());

如果您想要实际的子表达式(((A)(B(C)))(A)等),那么不,该信息不可用。

答案 1 :(得分:2)

是。检查一下:

Regex Named Groups in Java