用于测试字符串是否以数字结尾的正则表达式

2022-09-04 08:06:15

我想测试字符串是否以数字结尾。我希望下面的 Java 行打印 true。为什么它打印错误?

System.out.println("I end with a number 4".matches("\\d$"));

答案 1

您的正则表达式不会匹配整个字符串,而只会匹配最后一部分。尝试下面的代码,它应该工作正常,因为它与整个字符串匹配。

System.out.println("I end with a number 4".matches("^.+?\\d$"));

您可以对此进行测试,以便快速检查在线正则表达式测试器,例如:http://www.regexplanet.com/simple/index.html。这还为您提供了在结果中的 Java 代码中使用的内容,并带有适当的转义。

.+ 将确保数字前至少存在一个字符。 将确保它执行惰性匹配,而不是贪婪匹配。


答案 2

在Java Regex中,Matcher.find()(在字符串中的任何位置查找匹配项)和 Matcher.matches()(匹配整个字符串)之间存在差异。

String 只有一个方法(实现等效于此代码:),因此您需要创建一个与完整 String 匹配的模式:matches()Pattern.compile(pattern).matcher(this).matches();

System.out.println("I end with a number 4".matches("^.*\\d$"));