FLEX:匹配正负整数和浮点数的正则表达式是什么,其中指数也可以存在?

问题描述

我想匹配数字如---

10 ,-10, 10E5 ,10e5

作为整数和数字之类的--

10.554 ,-10.5 ,10.5E5 ,-10.5e-5

作为浮点数。

如何在词法分析器 FLEX 中实现?

我正在以这种方式尝试:

^[+-]?\d+([eE][-+]?[0-9]+)?$ {++CountInteger;}
^[-+]?[0-9]*[.][0-9]+([eE][-+]?[0-9]+)?$ {++CountFloat;}

但它不起作用,我的情况有什么问题,应该有什么解决方案? 提前致谢。

解决方法

除非您想匹配仅包含单个数字的行,否则您需要删除 ^ 和 $。如果正则表达式出现问题,请分步构建它,并确保它在每一步后都能按预期工作。

,

如果您已经证明您正在处理一个数字,而您只需要查看它是整数还是浮点数,那么您的正则表达式可能非常简单,只需检查 {{1 }}。

例如模式将是 .。如果这对你有用 - 太棒了!越容易越好!

如果你需要证明你有一个数字,那么事情就变得有点复杂了。我建议:

对于整数 - "\."

  • 可选的负号 ^-?\d+([eE]-?\d+)?$,一位或多位数字 -?,然后是可选的指数部分 \d+
    • 指数部分应该有“e”或“E”([eE]-?\d+)?、一个可选的负号[eE]和一位或多位指数-?

对于浮点数 - 它只是略有修改:\d+

  • 修改的是 ^-?\d+\.\d+([eE]-?\d+)?$ 位,它将与 \.\d+ 和句点后的一位或多位数字完全匹配。
,

一点想象:

path of -?\d+([eE]-?\d+)?

(创建于 jex.im

另见: