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
结果却不是请解释一下,并给出能用的表达式
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/>第二个:(.*?)<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("第一个:(.*?)<br/>第二个:(.*?)<br/>");
从1111就开始匹配了,所以输出
1111<br/>第一个:2222
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));
}
}自己汗一个...
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/>"师傅,我说滴对不对吖???