我正在使用http://gskinner.com/RegExr/来测试我的正则表达式:[+-]?\d+\.?\d*(e[+-]?\d+)?
。它应该匹配浮点数。目前它不匹配.x
,但我想让它做到这一点。
我尝试将其更改为[+-]?\d*\.?\d*(e[+-]?\d+)?
(更改+
为*
),但这是一个错误。这里出了什么问题?
更新:是因为一切都是可选的吗?
我正在使用http://gskinner.com/RegExr/来测试我的正则表达式:[+-]?\d+\.?\d*(e[+-]?\d+)?
。它应该匹配浮点数。目前它不匹配.x
,但我想让它做到这一点。
我尝试将其更改为[+-]?\d*\.?\d*(e[+-]?\d+)?
(更改+
为*
),但这是一个错误。这里出了什么问题?
更新:是因为一切都是可选的吗?
更改\.?
为\.
,它将起作用:
[+-]?\d*\.\d*(e[+-]?\d+)?
我想这一点不是可选的。
但是,如果您想这样做,请用 更好地描述它[.]+
。
正如@h2ooooooo 提到的,这似乎是正则表达式的 as3 实现中的一个错误。
\d+\.?\d+ // works
\d*\.?\d+ // works
\d*\.?\d* // does not work
\d?\.?\d? // does not work
是的,您修改后的正则表达式匹配空字符串,也就是说,它匹配输入字符串的任何位置。
试试这个:
[+-]?(?:\d+|\d*\.\d+)(?:e[+-]?\d+)?
它使得子组中有两个不同的分支;可以是整数(无小数点,位于 的左侧|
),也可以是带有可选前缀但强制点的浮点数,点后有 1 个强制数字。
这个将要 应该允许匹配诸如1.0
, -.2
,1e7
等的东西。
^[+-]?(([0-9]+)|([0-9]*\.[0-9]+|[0-9]+\.[0-9]*)|(([0-9]+|([0-9]*\.[0-9]+|[0-9]+\.[0-9]*))[eE][+-]?[0-9]+))$