import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegularTest {
 public static void main(String[] args) {
  // TODO Auto-generated method stub
  String s="aaa<bbbb>ssss<cccc>dddd<asdsa>sss";
  Matcher m = Pattern.compile("<(\\w+)>").matcher(s);
  while(m.find()){
       //System.out.println(m.start(1));
       //System.out.println(m.end(1));
       System.out.println(m.group(1));
  }
 }} 这里是匹配bbbb cccc asdsa 
为什么System.out.println(m.group(1));改为System.out.println(m.group(2));
就出错
Exception in thread "main" java.lang.IndexOutOfBoundsException: No group 2

解决方案 »

  1.   


    你的:
    Matcher m = Pattern.compile(" <(\\w+)>").matcher(s); 你的正则表达式<(\\w+)>都只有一个括号,哪里来的group(2)?
      

  2.   

    加上这一句
    System.out.println(m.groupCount()); 输出是1就是说你的group(2)已经越界了~~
      

  3.   

    public int end(int group)返回在以前的匹配操作期间,由给定组所捕获子序列的最后字符之后的偏移量。
    这个方法到底是什么意思啊??今天刚刚看正则表达式。能举个例子吗??
      

  4.   

    <((\\w+))>这样是不是就有两个组啦???
      

  5.   

    你定几个捕获组,就能group调用几次
      

  6.   

     <(\\w+)>这个是group(0)
    (\\w+) 这个是group(1)再也没有了。