请解释一下这个正则匹配代码的运行结果为何不是我期望的
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)); } }}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的说法
[解决办法]