[英]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.