我使用的方法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