2012-07-27 211 views
0

我使用的方法String.matches(String regex)找到,如果一个字符串匹配的正则表达式为什么“3.5”.matches(“[0-9] +”)返回false?

从我的观点来看,正则表达式regex="[0-9]+"意味着至少包含一个数字0到9之间

但是当我调试的String "3.5".matches("[0-9]+")它返回false。

那又怎么了?

+5

'.'不是一个数字。 – BalusC 2012-07-27 16:32:03

回答

8

matches确定正则表达式是否匹配整个字符串。它不会返回true如果字符串包含的匹配。

要测试字符串是否与给定的正则表达式匹配,请使用Pattern.compile(regex).matcher(string).find()

(你的正则表达式,[0-9]+,将匹配任何只包含0到9位数字的字符串,并且至少有一位数字,它不会与任何实数匹配,如果你想匹配任何实数,在例如Javadoc for Double.valueOf(String),指定在验证双打使用正则表达式,这正则表达式允许十六进制输入,NaN的,和无穷大,但它应该给你真实需要什么更好的主意。)

或者,直接编辑正则表达式,因此匹配任何包含一个或多个数字的字符串,例如.*[0-9]+.*会完成这项工作。

+0

'。* [0-9] +。*'确实匹配任何带有#的字符串,但我不认为这是OP要查找的内容。听起来他感到困惑,认为他的正则表达式会在数字上匹配而不是字符串。 '。* [0-9] +。*'确实匹配'3.5',但它也匹配'a1b'。你有最好的解释,但可能包含来自RoddyoftheFrozenPea的答案的正则表达式? +1更新 – Windle 2012-07-27 16:50:40

3

如果你想匹配十进制数,你的前例需要是\d*\.?\d+。如果你还想要底片,那么\-?\d*\.?\d+

1

.不是0-9matches测试整个字符串。

相关问题