[英]IndexOutOfBoundsException when using Matcher.find()
此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开始,所以使用matcher.group(0)
编辑:要匹配标签之间的文本,请使用此正则表达式<abhi>(.*)<\\\\/abhi>
这篇文章可能会进一步阐明您的问题。 对Matcher Group感到困惑 。
简而言之,您尚未定义任何正则表达式分组来引用备用组。 您只有完整的匹配字符串。
在下面,如果您尝试添加分组的正则表达式来解析xml,则会发现0具有完整字符串,1具有begin标记,2具有值,以及3具有end标记。
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");
}
试试这个正则表达式:
<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));
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.