当前位置: 代码迷 >> J2SE >> 请解释一下这个正则匹配代码的运行结果为何不是小弟我期望的
  详细解决方案

请解释一下这个正则匹配代码的运行结果为何不是小弟我期望的

热度:35   发布时间:2016-04-24 12:59:05.0
请解释一下这个正则匹配代码的运行结果为何不是我期望的
Java code
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
结果却不是

请解释一下,并给出能用的表达式

------解决方案--------------------

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

------解决方案--------------------
支持“福临天下”
------解决方案--------------------
探讨
支持“福临天下”

------解决方案--------------------
顶下 关注
------解决方案--------------------
Java code
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));        }    }
------解决方案--------------------
Pattern p = Pattern.compile("第一个:(\\d*?)<br/>第二个:(\\d*?)<br/>");

把.改成\\d 肯定行
------解决方案--------------------
.的范围太大了 是字符就匹配 打印出来的肯定是一大串字符 而不是楼主要的数字


------解决方案--------------------
Pattern p = Pattern.compile("第一个:([0-9]*?)<br/>第二个:[0-9]*?<br/>");
------解决方案--------------------
如果只是要数字,可以用\\d匹配数字

------解决方案--------------------
同意jeojeo的说法
------解决方案--------------------
探讨
同意jeojeo的说法

------解决方案--------------------
引用楼主 tteesstt 的帖子:
Pattern p = Pattern.compile("第一个:(.*?)<br/>第二个:(.*?)<br/>");