Ami*_*wal 4 java regex pattern-matching
我在下面的代码,我试图在使用字符串打印所有匹配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));
}
Run Code Online (Sandbox Code Playgroud)
上面的代码在线程"main"中抛出异常java.lang.IndexOutOfBoundsException:No group 2 Exception.
所以我的问题是如何Matcher.group()工作和你可以看到我将有3个匹配的字符串,我怎么能用它打印所有这些group().
很明显,你只有一个小组:
^ak\\s*=\\s*(\\w+)
// ^----^----------this is the only group
Run Code Online (Sandbox Code Playgroud)
相反,你必须使用一个循环,例如:
while(matcher.find()){
System.out.println("match " + matcher.group());
}
Run Code Online (Sandbox Code Playgroud)
输出
match = foo
match = bar
match = blr05
Run Code Online (Sandbox Code Playgroud)
阅读有关群组:
捕获组
括号将它们之间的正则表达式组合在一起.它们将与其中的正则表达式匹配的文本捕获到编号组中,该组可以使用带编号的反向引用进行重用.它们允许您将正则表达式运算符应用于整个分组正则表达式.
| 归档时间: |
|
| 查看次数: |
1324 次 |
| 最近记录: |