我想匹配括号内的一个单词(包括括号),我的Regex
下面是工作,但它不返回我所有的组。
下面是我的代码:
String text = "This_is_a_[sample]_text[notworking]";
Matcher matcher = Pattern.compile("\\[([a-zA-Z_]+)\\]").matcher(text);
if (matcher.find()) {
for (int i = 0; i <= matcher.groupCount(); i++) {
System.out.println("------------------------------------");
System.out.println("Group " + i + ": " + matcher.group(i));
}
我也在Regex Planet中测试过它,它似乎可以工作。
它必须返回4组:
------------------------------------
Group 0: [sample]
------------------------------------
Group 1: sample
------------------------------------
Group 2: [notworking]
------------------------------------
Group 3: notworking
但它返回的是:
------------------------------------
Group 0: [sample]
------------------------------------
Group 1: sample
怎么了?
4条答案
按热度按时间yqkkidmi1#
JAVA没有提供一次查找所有匹配项的全局选项。
Ideone Demo
disbfnqx2#
组不被认为可以找到多个匹配项,而是被认为可以在一个匹配项中识别多个子部分,例如表达式
"([A-Za-z]*):([A-Za-z]*)"
可以匹配一个键值对,你可以得到组1的键和组2的值。表达式中只有1个组(=一个方括号对),因此只返回组0(始终是整个匹配的表达式,与手动定义的组无关)和1(定义的单个组)。
在本例中,如果需要更多匹配,请尝试迭代调用
find
。yizd12fk3#
此外,如果你知道你将得到的匹配数量,你可以找到组并将它们添加到列表中,然后在需要时从列表中获取值并将其分配到其他地方
8iwquhpp4#
如果你知道匹配组的确切数量,在java 9或更高版本中,可以这样做: