正则表达式来测试一个字符串是否以数字结尾
我想测试一个字符串是否以数字结尾。我期望以下Java行可以打印出真实的。为什么它打印错误?正则表达式来测试一个字符串是否以数字结尾
System.out.println("I end with a number 4".matches("\\d$"));
在Java正则表达式,有(找到一个匹配的字符串的任何地方)和Matcher.matches()
Matcher.find()
之间的差异(符合整个字符串)。
字符串只有一个matches()
方法(实施相当于此代码:Pattern.compile(pattern).matcher(this).matches();
),所以你需要创建一个完整的字符串相匹配的模式:
System.out.println("I end with a number 4".matches("^.*\\d$"));
你的正则表达式不会匹配整个字符串,但只最后一部分。尝试下面的代码,它应该很好地工作,因为它匹配整个字符串。 http://www.regexplanet.com/simple/index.html:
System.out.println("I end with a number 4".matches("^.+?\\d$"));
您可以在线正则表达式测试仪进行快速检查像这样进行测试。这也给你你应该在Java代码中使用适当的转义结果。
。+将确保数字之前至少有一个字符。 The ?将确保它做一个懒惰的匹配,而不是一个贪婪的匹配。
在这种情况下做一个懒惰的匹配是没有意义的。我们*希望*。+'立即吞噬整个字符串。然后它将退回一个位置,将最后一个字符与'\ d'进行比较,这是我们唯一关心的事情。 –
试试这个:
System.out.println("I end with a number 4".matches(".*\\d\$"));
不会编译,'\ $'在Java中是非法的 –
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
您的正则表达式是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$"));
这也可能与你的问题:http://*.com/questions/627545/java-regexp-problem-www-vs-www – AdrianoKF