String content = "<td>1</td><td>2</td>abcd z";
String regex = "<td>(\\d{1,3})</td>.+?z";
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(content);
while (m.find()) {
System.out.println(m.group(1));
}结果打印为1,而我已经在regex里的"."的"+"后面加上了"?",应该是Reluctant形式的。为什么还会取到1,而不是2.
String regex = "<td>(\\d{1,3})</td>.+?z";
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(content);
while (m.find()) {
System.out.println(m.group(1));
}结果打印为1,而我已经在regex里的"."的"+"后面加上了"?",应该是Reluctant形式的。为什么还会取到1,而不是2.
String content = "<td>1</td><td>2</td>abcd z";
String regex = "<td>(\\d{1,3})</td>[a-z ]+?z";
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(content);
while (m.find()) {
System.out.println(m.group(1));
}嗯,谢谢你的解答,我上面这一个regex也能使打印2.但是我不明白的是为什么当".+"的时候,后面加?就不会是最小匹配了呢?
1 点(.)可以匹配任何字符,包括<>,
2 匹配是从第一个字符开始的,你看看那个1 也是满足你的要求的哦,因为后面的那个<td>2</td>被点给匹配掉了。你的a-z也可以,不过局限性比较大,如果有数字呢?有其它符号呢?所以到底用什么界限符号,你得自己考虑清楚,我觉得< > 比较合适。
普通的用 \\w 就行了