大家好,刚学regular expression不久,很是困惑
假设我的表达式是(?m)(\\S+)\\s+((\\S+)\\s+(\\S+))$这个是在Java中的,那么group 1是什么呢?各个group各是什么呢?请大家不吝指教,不胜感激!

解决方案 »

  1.   

    数左括号,并且左括号右边不是 ? 的从 1 依次进行编号,编号即为组号,
    组中的内容从左括号到与之匹配的右括号。
    (?m)(\\S+)\\s+((\\S+)\\s+(\\S+))$
        1         23         4这个表达式有 4 个捕获组
      

  2.   

    那么group1 是不是(?m)(\\S+)$呢?
    group 2 是不是(?m)\\s++((\\S+)\\s+(\\S+))$呢?
      

  3.   

    好好看看1楼的话.()中的字符才是捕获组。(?m)(\\S+)\\s+((\\S+)\\s+(\\S+))$
    这是group(1).(?m)(\\S+)\\s+( (\\S+)\\s+(\\S+) )$
    这是group(2)(?m)(\\S+)\\s+((\\S+)\\s+(\\S+))$
    这是group(3)(?m)(\\S+)\\s+((\\S+)\\s+(\\S+))$
    这是group(4)
      

  4.   

    测试一下:
    public static void main(String args[]) throws Exception {
         String regex="(?m)(\\S+)\\s+((\\S+)\\s+(\\S+))$";
         Matcher m=Pattern.compile(regex).matcher("I Love You!");
         if(m.find()){
         System.out.println("group1:"+m.group(1));
         System.out.println("group2:"+m.group(2));
         System.out.println("group3:"+m.group(3));
         System.out.println("group4:"+m.group(4));
         }
      
        }
    F:\java>java Test
    group1:I
    group2:Love You!
    group3:Love
    group4:You!