我对正则表达式评估有疑问。这里有一些java代码只测试字符串中的数字:
import java.util.regex.*;
public class RegexPractice
{
public RegexPractice()
{
}
public static void checkNum(String pattern)
{
if(pattern.matches("^\\d*"))
{
System.out.println(pattern);
}
else
{
System.out.println("false");
}
}
public static void main(String args[])
{
checkNum("543853473");
checkNum("ipabgrieahgbre");
checkNum("frgwe9789fdsa798dfas");
checkNum("54336534 4364 546 654");
checkNum("");
checkNum(" ");
}
}
如果传递的字符串与正则表达式“^ \ d”匹配,则打印字符串,否则打印为false。我惊讶地看到打印出空字符串。为什么会这样?因为它不包含数字。
我知道我可以通过不允许空字符串来解决这个问题,但我很好奇为什么它被评估为真。
答案 0 :(得分:2)
这是因为正则表达式:\\d*
表示匹配0位或更多位数,因此空字符串也会匹配。
成功:
pattern.matches("^\\d+$")
避免匹配空字符串并确保输入中仅匹配数字。