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

发布于 2024-10-10 08:21:20 字数 391 浏览 9 评论 0原文

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

Java 文档中的示例:

捕获组的编号为 计算左括号的数量 从左到右。在表达式中 ((A)(B(C))),例如有 四个这样的组:

<前><代码>1 ((A)(B(C))) 2(一) 3(乙(丙)) 4(三)

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

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

Is there a way in Java (perhaps with an additional Open Source library) to identify the capture groups in a java.util.regex.Pattern (i.e. before creating a Matcher)

Example from the Java docs:

Capturing groups are numbered by
counting their opening parentheses
from left to right. In the expression
((A)(B(C))), for example, there are
four such groups:

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

In principle it should be possible to identify these from the (compiled) Pattern.

UPDATE:
From @Leniel and eslewhere it seems that this facility ("named groups") will be present in Java 7 in mid 2011. If I can't wait for that I can use jregex although I'm not quite sure what the API is.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

涫野音 2024-10-17 08:21:20

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

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

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

You can find out the number of groups by creating a dummy Matcher, like so:

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

If you want the actual subexpressions (((A)(B(C))), (A), etc.), then no, that information is not available.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文