问题描述
我想匹配数字如---
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]
和一位或多位指数-?
- 指数部分应该有“e”或“E”
对于浮点数 - 它只是略有修改:\d+
- 修改的是
^-?\d+\.\d+([eE]-?\d+)?$
位,它将与\.\d+
和句点后的一位或多位数字完全匹配。
一点想象:
(创建于 jex.im)
另见: