代码如下:
import java.util.regex.*;
public class RegEx {
public static void main(String[] args) {
Pattern p = Pattern.compile("\\d*");
Matcher m = p.matcher("ab56ef");
System.out.println("Pattern is " + m.pattern());
while (m.find()) {
System.out.print("index: " + m.start() + " " + m.group());
}
}
}
结果是:
index: 0 index: 1 index: 2 56 index: 4 index: 5 index: 6
自" ab34ef"长度为6,字符串的最高指数为5 为什么索引6处有匹配?提前谢谢!
答案 0 :(得分:8)
您返回了6个索引,因为此处有6个匹配,因为\d*
可以匹配空字符串。在输入字符串中的每个字符之前总是有一个空字符串,因为正则表达式引擎在每个位置处理文本以查找边界或特定字符。
以下是visualization:
这里,引擎检查字符串的开头,并说:“我看不到数字,但我可以返回匹配,因为数字位数可以是0”。它返回空字符串作为匹配项,然后继续b
。依此类推,直到字符串结束。
如果您需要查找所有数字,只需使用+
量词与\d
速记类。
请参阅IDEONE demo