修复简单算术表达式匹配Regex:限制等号仅出现一次且后接数字
修正匹配简单算术表达式的正则(限制等号仅出现一次)
原正则 ^[+-]?\d+([/*+-]\d+)*([/*+-]*=(?:[+-]?\d+([/*+-]\d+)*)+)*$ 会错误匹配 7=7=7 这类多等号的非法表达式,下面是调整后的解决方案:
修正后的正则表达式
^[+-]?\d+([/*+-]\d+)*(?:[/*+-]*=[+-]?\d+([/*+-]\d+)*)?$
关键调整说明
- 把原正则中允许等号重复的
(...)*结构改成可选的单次匹配,直接限制等号最多出现一次 - 明确要求等号后必须跟完整的合法算术表达式(
[+-]?\d+([/*+-]\d+)*),杜绝了0=这类等号后为空的情况 - 保留了原正则对开头非法表达式(如
*23)的过滤逻辑
测试验证
合法匹配内容
- 纯算术表达式:
123、-45+6*7、+8/9-10 - 单等号等式:
7=7、1+2=3*4、-5*-6=+7+8
被排除的非法内容
- 多等号表达式:
7=7=7 - 等号后无内容:
0= - 开头运算符非法:
*23、/45
内容的提问来源于stack exchange,提问作者phuck
相关产品推荐
相关产品推荐

