import java.util.regex.Matcher;
import java.util.regex.Pattern;public class Test {
  public static void main(String[] args) {
    String str = "第一个:1111<br/>第一个:2222<br/>第二个:3333<br/>";
    Pattern p = Pattern.compile("第一个:(.*?)<br/>第二个:(.*?)<br/>");
    Matcher m = p.matcher(str);
    if (m.find()) {
      System.out.println(m.group(1));
      System.out.println(m.group(2));
    }
  }
}我希望拿到2222和3333
结果却不是请解释一下,并给出能用的表达式

解决方案 »

  1.   

            String str = "第一个:1111<br/>第一个:2222<br/>第二个:3333<br/>";
            Pattern p = Pattern.compile("<br/>第一个:(.*?)<br/>第二个:(.*?)<br/>");
            Matcher m = p.matcher(str);
            if (m.find()) {
              System.out.println(m.group(1));
              System.out.println(m.group(2));
            }
      

  2.   

    你的
    Pattern p = Pattern.compile("第一个:(.*?)<br/>第二个:(.*?)<br/>");
    从1111就开始匹配了,所以输出
    1111<br/>第一个:2222
      

  3.   

    第一个:1111<br/>第一个:2222<br/>第二个:3333<br/>这里面有2个第一个,我希望匹配后面一个请问如何解决呢?
      

  4.   


    String str = "第一个:1111<br/>第一个:2222<br/>第二个:3333<br/>";
    Pattern p = Pattern.compile("第一个:1111<br/>第一个:(.*?)<br/>第二个:(.*?)<br/>");
    Matcher m = p.matcher(str);
    if (m.find()) {
    System.out.println(m.group(1));
    System.out.println(m.group(2));
    }
    }自己汗一个...
      

  5.   

    Pattern p = Pattern.compile("第一个:(\\d*?)<br/>第二个:(\\d*?)<br/>");把.改成\\d 肯定行
      

  6.   

    Pattern p = Pattern.compile("第一个:([0-9]*?)<br/>第二个:[0-9]*?<br/>");
      

  7.   

    我师父出去了,由徒弟代答:
    String str = "第一个:1111<br/>第一个:2222<br/>第二个:3333<br/>";
    Pattern p = Pattern.compile("第一个:(.*?)<br/>第二个:(.*?)<br/>");
    “第一个:” 肯定匹配到的是"第一个:",
    关键在后面的那个(.*?),它匹配到的实际上是:1111<br/>第一个:2222为什么呢?.*? ,非贪婪匹配,它先匹配到"1",
    可是(.*?) 后面跟的是<br/>也就是说, (.*?) 这个分组所匹配到的内容的后面,必须跟着<br/>而刚匹配到的 "1" 后面跟着的还是1,不是<br/>出于无奈,(.*?) 就又向后侵占了一个字符,这下匹配到的是"11",可是"11"后面仍然不是<br/>就这么一直侵占,(.*?)就匹配到了"1111""1111"后面跟的是<br/>可是, "第一个:(.*?)<br/>第二个:"<br/> 的后面要求是"第二个:"而"1111"这个字符串后面的 (断句) 那个<br/> 的 (断句) 后面是:"第一个:"所以没有办法,为了使匹配成功,(.*?) 会继续向后侵占。一直匹配到 "1111<br/>第一个:2222"发现,后面是<br/>,而且<br/>的后面是"第二个:"这时,(.*?) 的匹配才算结束。它最终匹配到的是 "1111<br/>第一个:2222"然后  "第二个:" 匹配到了 "第二个:""(.*?)" 匹配到了 "3333""<br/>" 匹配到了 "<br/>"师傅,我说滴对不对吖???
      

  8.   

    简言之,reluctant quantifiers仅对于group pattern右边界具有辨识能力 貌似因此其无法应用于完全嵌套情形