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

时间:2011-10-07 16:45:34

标签: java regex

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

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

5 个答案:

答案 0 :(得分:15)

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

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

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

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

答案 1 :(得分:9)

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

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

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

答案 2 :(得分:3)

您的RegEx表达式为slightly off。试试这个:

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

如果您一次评估一条线路,也可以像这样进行测试:

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

您的原始表达式,没有。*仅测试该字符串是否为数字,并且未考虑该数字之前的文本。这就是为什么它总是错误的。

以下评估为真:

System.out.println("4".matches("^\\d$"));

答案 3 :(得分:1)

System.out.println("I end with a number 4".matches(".*\\d")); // prints true

String s = "I end with a number 4";
System.out.println(Character.isDigit(s.charAt(s.length()-1)));  // prints true

答案 4 :(得分:-1)

试试这个:

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