识别正则表达式模式中的捕获组
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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您可以通过创建虚拟匹配器来找出组的数量,如下所示:
如果您想要实际的子表达式 (
((A)(B(C)))
,(A)
等),那么不,该信息不可用。You can find out the number of groups by creating a dummy Matcher, like so:
If you want the actual subexpressions (
((A)(B(C)))
,(A)
, etc.), then no, that information is not available.是的。检查这个:
Java 中的正则表达式命名组
Yes. Check this:
Regex Named Groups in Java