我试图写一个简单的正则表达式来匹配实数,就像这样:
[+-]?[\\d]+[\\.]?[\\d]*
正则表达式序列的说明 - 可选的+或 - 符号,1位或更多位数,可选句点,0位或更多位数
问题是它匹配一个字符串,如果它包含一个数字(例如,找到abc23的匹配)。但我想只匹配实数。
答案 0 :(得分:1)
在matches
方法中使用以下正则表达式。
[+-]?\\d+(?:\\.\\d+)?
代码:
System.out.println("abc".matches("[+-]?\\d+(?:\\.\\d+)?"));
System.out.println("abc123".matches("[+-]?\\d+(?:\\.\\d+)?"));
System.out.println("12.".matches("[+-]?\\d+(?:\\.\\d+)?"));
System.out.println("+65657".matches("[+-]?\\d+(?:\\.\\d+)?"));
System.out.println("-8.99".matches("[+-]?\\d+(?:\\.\\d+)?"));
输出:
false
false
false
true
true
第三个示例的输出为false
,因为数字以点结尾。我认为这不太对。
答案 1 :(得分:0)
你必须使用这种模式
^[+-]?[\d]+[\.]?[\d]*$/gm
^ - Begin character
[+-]? - ? means optional either + or - sign if have otherwise not a compulsory
[\d]+ - Allow Digit number and + extend any number of digit
[\.]? - Allow period sign (.), optional
[\d]* - Allow Digit number and * specifies 0 or more
$ - Ending of the string
/gm - Matching global, multiline