//依次输出字符串ss中的Tag标签如:"<Tag id = first>"、"<Tag id=second >"
String ss = "测试标签:<Tag id = first>abc<Tag id=second >def<Tag id=third>xxx";
    Pattern  p = Pattern.compile("[.]*(\\<Gamd[^\\>]+\\>)+[.]*",Pattern.CASE_INSENSITIVE);
    m = p.matcher(ss);
    if(m.find()){
       for(int i = 0 ;i<m.groupCount();i++){
          System.out.println(m.group(1));
       }
     }但是程序只能找到第一个标签"<Tag id = first>",不知何故,请教高手!

解决方案 »

  1.   

    补充一下,把模式中的“Gamd”改成“Tag”
      

  2.   


    假如LZ的那个表达式是正确的!要输出所有的Tag标签!就要让所有m.find()中的group(1)都输出!
    而LZ的程序中,只用if(m.find()){    if语句是不是只判断一次?当然只输出一次的结果!
    换成 while(m.find())!另外,   for(int i = 0 ;i <m.groupCount();i++){ 由于LZ的正则式中只有一对括号。所以groupCount()值永远都是1,也就是这个循环只能被执行一次,所以这个for循环没有什么意义,可以省去!现在来看下LZ的正则式:“\\ <Tag[^\\ >]+\\ >)+[.]*",” 
    \\是转义的意思,而"<"与“>”是不用转义的吧?
      

  3.   

    谢谢 johnsoncr 问题正是出在循环上!