我使用的方法String.matches(String regex)
找到,如果一个字符串匹配的正则表达式为什么“3.5”.matches(“[0-9] +”)返回false?
从我的观点来看,正则表达式regex="[0-9]+"
意味着至少包含一个数字0到9之间
但是当我调试的String "3.5".matches("[0-9]+")
它返回false。
那又怎么了?
我使用的方法String.matches(String regex)
找到,如果一个字符串匹配的正则表达式为什么“3.5”.matches(“[0-9] +”)返回false?
从我的观点来看,正则表达式regex="[0-9]+"
意味着至少包含一个数字0到9之间
但是当我调试的String "3.5".matches("[0-9]+")
它返回false。
那又怎么了?
matches
确定正则表达式是否匹配整个字符串。它不会返回true
如果字符串包含的匹配。
要测试字符串是否与给定的正则表达式匹配,请使用Pattern.compile(regex).matcher(string).find()
。
(你的正则表达式,[0-9]+
,将匹配任何只包含0到9位数字的字符串,并且至少有一位数字,它不会与任何实数匹配,如果你想匹配任何实数,在例如Javadoc for Double.valueOf(String)
,指定在验证双打使用正则表达式,这正则表达式允许十六进制输入,NaN的,和无穷大,但它应该给你真实需要什么更好的主意。)
或者,直接编辑正则表达式,因此匹配任何包含一个或多个数字的字符串,例如.*[0-9]+.*
会完成这项工作。
'。* [0-9] +。*'确实匹配任何带有#的字符串,但我不认为这是OP要查找的内容。听起来他感到困惑,认为他的正则表达式会在数字上匹配而不是字符串。 '。* [0-9] +。*'确实匹配'3.5',但它也匹配'a1b'。你有最好的解释,但可能包含来自RoddyoftheFrozenPea的答案的正则表达式? +1更新 – Windle 2012-07-27 16:50:40
如果你想匹配十进制数,你的前例需要是\d*\.?\d+
。如果你还想要底片,那么\-?\d*\.?\d+
。
.
不是0-9
和matches
测试整个字符串。
'.'不是一个数字。 – BalusC 2012-07-27 16:32:03