4

Java中有没有办法(可能有一个额外的开源库)来识别a中的捕获组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 是什么是。

4

2 回答 2

7

您可以通过创建一个虚拟匹配器来找出组的数量,如下所示:

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

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

于 2011-01-04T01:29:50.137 回答
2

是的。检查这个:

Java中的正则表达式命名组

于 2011-01-04T00:30:27.823 回答