这个Java程序在尝试调用group(1)
时向我显示IndexOutOfBoundsException。如果我将1
替换为0
,则会打印整行。我该怎么办?
Pattern pattern = Pattern.compile("<abhi> abhinesh </abhi>");
Matcher matcher = pattern.matcher("<abhi> abhinesh </abhi>");
if (matcher.find())
System.out.println(matcher.group(1));
else
System.out.println("Not found");
答案 0 :(得分:2)
索引从0开始,因此请使用matcher.group(0)
修改:要匹配代码之间的文字,请使用此正则表达式<abhi>(.*)<\\/abhi>
答案 1 :(得分:1)
这篇文章可能会对你的问题有所了解。 Confused about Matcher Group。
简而言之,您还没有定义任何正则表达式分组来引用备用组。您只有完整匹配的字符串。
如果你尝试添加一个分组的正则表达式来解析xml,你会注意到0有完整的字符串,1有开始标记,2有值,3有结束标记。
Pattern pattern = Pattern.compile("<([a-z]+)>([a-z ]+)</([a-z]+)>");
Matcher matcher = pattern.matcher("<abhi> abhinesh </abhi>");
if (matcher.find()){
System.out.println(matcher.group(0));//<abhi> abhinesh </abhi>
System.out.println(matcher.group(1));//abhi
System.out.println(matcher.group(2));// abhinesh
System.out.println(matcher.group(3));//abhi
}else{
System.out.println("Not found");
}
答案 2 :(得分:0)
试试这个正则表达式:
<abhi>(.*)<\\/abhi>
您所关注的文本将存储在第一个捕获组中。
示例:
String regex = "<abhi>(.*)<\\/abhi>";
String input = "<abhi>foo</abhi>";
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(input);
if (m.find()) {
System.out.println(m.group(1));
}