You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

FLEX中匹配带指数的正负整数、浮点数的正则写法问题

现有规则的问题

  • 误用了行首^和行尾$锚定符:Flex的匹配规则是针对输入流中的独立token设计的,添加行首行尾锚点后,只有数字单独占据完整一行时才能被匹配,正常嵌入在代码/文本中的数字会完全匹配失败。
  • 使用了Flex不原生支持的\d简写:Flex的正则语法不兼容Perl风格的数字简写\d,部分版本会直接识别为普通字符d,导致匹配逻辑错误,需要替换为标准的[0-9]写法。

正确实现方案

首先在Flex的声明段提前定义计数器变量:

%{
int CountInteger = 0;
int CountFloat = 0;
%}

然后在规则段使用如下匹配规则即可:

/* 匹配整数:支持正负、科学计数法 */
[+-]?[0-9]+([eE][+-]?[0-9]+)?    { ++CountInteger; }
/* 匹配浮点数:支持正负、小数点、科学计数法 */
[+-]?[0-9]*\.[0-9]+([eE][+-]?[0-9]+)?    { ++CountFloat; }
/* 可选:忽略空白符,可根据实际需求调整 */
[ \t\n\r]+    { ; }

补充说明

如果需要支持123.这类小数点后无数字的浮点数格式,可以将浮点数的匹配规则修改为:

[+-]?([0-9]+\.[0-9]*|\.[0-9]+)([eE][+-]?[0-9]+)?    { ++CountFloat; }

内容的提问来源于stack exchange,提问作者Ashikur Rahman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.17 17:15:09