Java 使用Matcher.find()时发生IndexOutOfBoundsException

Java 使用Matcher.find()时发生IndexOutOfBoundsException,java,regex,Java,Regex,这个Java程序在尝试调用组(1)时向我显示IndexOutOfBoundsException。如果我将1替换为0,则打印整行。。我该怎么办 Pattern pattern = Pattern.compile("<abhi> abhinesh </abhi>"); Matcher matcher = pattern.matcher("<abhi> abhinesh </abhi>"); if (matcher.find()) System.

这个Java程序在尝试调用
组(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");
Pattern=Pattern.compile(“abhinesh”);
Matcher Matcher=pattern.Matcher(“abhinesh”);
if(matcher.find())
系统输出println(匹配器组(1));
其他的
System.out.println(“未找到”);

索引从0开始,因此使用
matcher.group(0)


编辑:要匹配标记之间的文本,请使用此正则表达式
(.*)

索引从0开始,因此使用
matcher.group(0)


编辑:要匹配标记之间的文本,请使用此正则表达式
(.*)

索引从0开始,因此使用
matcher.group(0)


编辑:要匹配标记之间的文本,请使用此正则表达式
(.*)

索引从0开始,因此使用
matcher.group(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));
    }
String regex=“(.*)”;
字符串输入=“foo”;
Pattern p=Pattern.compile(regex);
匹配器m=p.Matcher(输入);
if(m.find()){
系统输出println(m.group(1));
}
试试这个正则表达式:

<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));
    }
String regex=“(.*)”;
字符串输入=“foo”;
Pattern p=Pattern.compile(regex);
匹配器m=p.Matcher(输入);
if(m.find()){
系统输出println(m.group(1));
}
试试这个正则表达式:

<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));
    }
String regex=“(.*)”;
字符串输入=“foo”;
Pattern p=Pattern.compile(regex);
匹配器m=p.Matcher(输入);
if(m.find()){
系统输出println(m.group(1));
}
试试这个正则表达式:

<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));
    }
String regex=“(.*)”;
字符串输入=“foo”;
Pattern p=Pattern.compile(regex);
匹配器m=p.Matcher(输入);
if(m.find()){
系统输出println(m.group(1));
}

这篇文章可能会对你的问题有更多的解释。 .

简而言之,您没有定义任何正则表达式分组来引用备用组。您只有完整的匹配字符串

下面,如果您尝试添加分组正则表达式来解析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");
}
Pattern=Pattern.compile(([a-z]+));
Matcher Matcher=pattern.Matcher(“abhinesh”);
if(matcher.find()){
System.out.println(matcher.group(0));//abhinesh
System.out.println(matcher.group(1));//abhi
System.out.println(matcher.group(2));//abhinesh
System.out.println(matcher.group(3));//abhi
}否则{
System.out.println(“未找到”);
}

这篇文章可能会对你的问题有更多的解释。 .

简而言之,您没有定义任何正则表达式分组来引用备用组。您只有完整的匹配字符串

下面,如果您尝试添加分组正则表达式来解析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");
}
Pattern=Pattern.compile(([a-z]+));
Matcher Matcher=pattern.Matcher(“abhinesh”);
if(matcher.find()){
System.out.println(matcher.group(0));//abhinesh
System.out.println(matcher.group(1));//abhi
System.out.println(matcher.group(2));//abhinesh
System.out.println(matcher.group(3));//abhi
}否则{
System.out.println(“未找到”);
}

这篇文章可能会对你的问题有更多的解释。 .

简而言之,您没有定义任何正则表达式分组来引用备用组。您只有完整的匹配字符串

下面,如果您尝试添加分组正则表达式来解析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");
}
Pattern=Pattern.compile(([a-z]+));
Matcher Matcher=pattern.Matcher(“abhinesh”);
if(matcher.find()){
System.out.println(matcher.group(0));//abhinesh
System.out.println(matcher.group(1));//abhi
System.out.println(matcher.group(2));//abhinesh
System.out.println(matcher.group(3));//abhi
}否则{
System.out.println(“未找到”);
}

这篇文章可能会对你的问题有更多的解释。 .

简而言之,您没有定义任何正则表达式分组来引用备用组。您只有完整的匹配字符串

下面,如果您尝试添加分组正则表达式来解析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");
}
Pattern=Pattern.compile(([a-z]+));
Matcher Matcher=pattern.Matcher(“abhinesh”);
if(matcher.find()){
System.out.println(matcher.group(0));//abhinesh
System.out.println(matcher.group(1));//abhi
System.out.println(matcher.group(2));//abhinesh
System.out.println(matcher.group(3));//abhi
}否则{
System.out.println(“未找到”);
}

您希望小组(1)做什么/返回什么?你知道正则表达式中的组是什么吗?我想打印带有标记的文本…首先,你的输入看起来像XML,那么为什么你在这里使用正则表达式而不是正确的XML解析器?你没有任何正则表达式组(由
()
分隔)。我对那个解析器不太了解。我熟悉java。这就是我尝试用java实现它的原因。但是如果你说xml解析器,我很感兴趣。你希望
group(1)
做什么/返回什么?你知道正则表达式中的组是什么吗?我想打印带有标签的文本…首先是al