在设计正则表达式以验证Java语言中连字符分隔的浮点数方面需要一些帮助。到目前为止,我已经成功实现了此RegEx:
(^((\\d)+(\.[0-9]+)?)(\-)?((\\d)+(\.[0-9]+)?)$)|^(\\d+)$
它符合以下条件:
1) 2
2) 2.10
3) 3.10-3.14
此问题在于它还匹配错误的数字“ 3.103.310”。非常感谢您为解决此问题提供的帮助。
答案 0 :(得分:2)
问题来自第一个替代方案,该替代方案将一个或多个数字与可选的小数部分((\d)+(\.[0-9]+)?
)匹配,然后再将连字符与1+个数字和可选的小数部分匹配。因此,允许2个点。
您可以这样修改模式:
^\d+(?:\.\d+)?(?:-\d+(?:\.\d+)?)*$
请参见regex demo
详细信息
^
-字符串的开头\d+
-1个以上数字(?:\.\d+)?
-可选的非捕获组:
\.
-一个点\d+
-1个以上数字(?:-\d+(?:\.\d+)?)*
-与0个以上的匹配项匹配的非捕获组
-
-连字符\d+(?:\.\d+)?
-1个以上的数字和1个或0次出现的.
和1个以上的数字$
-字符串结尾