繁体   English   中英

如何最好地访问模式中的捕获组数量?

[英]How best to access the number of capturing groups in a Pattern?

我想验证Pattern实例中的捕获组数。 我知道方法Matcher.groupCount()存在,但它需要一个有效的输入字符串。

有没有办法在没有Matcher实例的情况下访问捕获组的数量?

我目前的 hack 使用反射来访问包私有字段Pattern.capturingGroupCount ,但这很糟糕,原因有很多。

Field f = Pattern.class.getDeclaredField("capturingGroupCount");
int capturingGroupCount = (int) f.get(pattern);

我使用 Java 9+,所以不可能——据我所知——在包java.util.regex创建一个辅助方法来访问包私有字段capturingGroupCount (Java 编译器抱怨包java.util.regex已在模块java.base定义。)

最后的想法/意见:我很惊讶 Java API 没有公开这个成员,例如int capturingGroupCount()

我知道方法Matcher.groupCount()存在,但它需要一个有效的输入字符串。

不,它没有。

以下已在 Java 7 和 Java 13 上进行了测试:

Pattern p = Pattern.compile("(x)y(z)");
Matcher m = p.matcher("");
System.out.println(m.groupCount()); // prints: 2

如您所见,您甚至不必先调用find()matches() ,但您必须创建Matcher实例。

有没有办法在没有Matcher实例的情况下访问捕获组的数量?

不是纯Java,即不使用反射。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM