为什么java失败正则表达式

时间:2013-12-10 17:31:42

标签: java regex

我用扫描程序读取了正则表达式str.matches("\\D+")的条件,但在输入char + digit时,此测试失败,例如3x或e3,但不应该发生。 它应该在字符串中的任何位置传递任何非数字出现,即使它是一个符号。

4 个答案:

答案 0 :(得分:3)

如果mMatcher,那么m.matches仅在整个字符串与模式匹配时才会返回true。如果您只想检查字符串的某些部分是否匹配,则可以使用m.find代替m.matches。 (注意:我不确定这是否真的是你遇到的问题。)

答案 1 :(得分:1)

  

至少一次非数字出现应该就是我所说的,应该通过

这个怎么样

.*\D.*

你可以test it here

答案 2 :(得分:0)

此调用无法与3e匹配,因为:

str.matches("\\D+")

与:

相同
str.matches("^\\D+$")

因为String#matches获取给定的正则表达式并匹配完整的输入。

为了确保至少有一个非数字,你应该更好地使用这个基于前瞻性的正则表达式:

str.matches("(?=\\d*\\D).*")

(?=\\d*\\D)为正向预测,确保给定输入中至少有1位非数字。

答案 3 :(得分:-1)

\ D匹配任何非数字字符,因此如果您传递一个带有数字的字符串,它当然会失败。

如果您只想匹配字符和数字,可以执行以下操作:

matches("[a-zA-Z0-9"]+);