【发布时间】:2017-06-03 09:17:19
【问题描述】:
我在下面的代码中尝试使用Matcher.group() 打印字符串中的所有匹配项。
public static void main(String[] args) {
String s = "foo\r\nbar\r\nfoo"
+ "foo, bar\r\nak = "
+ "foo, bar\r\nak = "
+ "bar, bar\r\nak = "
+ "blr05\r\nsdfsdkfhsklfh";
//System.out.println(s);
Matcher matcher = Pattern.compile("^ak\\s*=\\s*(\\w+)", Pattern.MULTILINE)
.matcher(s);
matcher.find();
// This one works
System.out.println("first match " + matcher.group(1));
// Below 2 lines throws IndexOutOfBoundsException
System.out.println("second match " + matcher.group(2));
System.out.println("third match " + matcher.group(3));
}
以上代码在线程“main”java.lang.IndexOutOfBoundsException 中抛出异常:没有第 2 组异常。
所以我的问题是Matcher.group() 是如何工作的,如您所见,我将有 3 个匹配的字符串,我如何使用group() 打印所有这些字符串。
【问题讨论】:
-
您可能想要设置断点并检查
matcher的内容、group和find的交互方式等。 -
@luk2302 ,我确实使用了调试器,但不知道
group和find是如何交互的,
标签: java regex pattern-matching