用于实数Java的正则表达式

时间:2014-09-14 04:21:39

标签: java regex

我试图写一个简单的正则表达式来匹配实数,就像这样:

[+-]?[\\d]+[\\.]?[\\d]*

正则表达式序列的说明 - 可选的+或 - 符号,1位或更多位数,可选句点,0位或更多位数

问题是它匹配一个字符串,如果它包含一个数字(例如,找到abc23的匹配)。但我想只匹配实数。

2 个答案:

答案 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 

检查 Regexr