我遇到以下示例的问题:
import java.util.regex.*;
class Regex2 {
public static void main(String[] args) {
Pattern p = Pattern.compile(args[0]);
Matcher m = p.matcher(args[1]);
boolean b = false;
while(b = m.find()) {
System.out.print(m.start() + m.group());
}
}
}
命令行:
java Regex2 "\d*" ab34ef
有人可以解释一下,为什么结果是:01234456
正则表达式是d * - 它意味着第一或更多,但在args [1]中有更多的位置,
感谢
答案 0 :(得分:10)
\d*
匹配0位或更多位数。因此,它甚至会在每个字符之前和最后一个字符之后匹配空字符串。首先在索引0
之前,然后在索引1
之前,依此类推。
因此,对于字符串ab34ef
,它匹配以下组:
Index Group
0 "" (Before a)
1 "" (Before b)
2 34 (Matches more than 0 digits this time)
4 "" (Before `e` at index 4)
5 "" (Before f)
6 "" (At the end, after f)
如果您使用\\d+
,那么您只需在34
获得一个群组。