求适配C语言scanf("%f")格式的正数RE2正则表达式
RE2正则表达式验证兼容scanf("%f")格式的正数
最终正则表达式
^[+]?(?:(?:\d+\.?\d*)|(?:\.\d+))(?:[eE][+-]?\d+)?$
规则说明
- 匹配范围完全兼容C语言
scanf("%f")可解析的所有正数格式,包括:- 整数形式:如
123、+456 - 小数形式:如
123.45、123.、.45、+.67 - 指数形式:如
1e9、+123.45E-6、.78e+10、90.E5
- 整数形式:如
- 正则各部分解析:
^:锚定字符串开头,确保匹配完整的分词单元[+]?:可选的正号前缀,符合scanf对正数的解析规则(?:(?:\d+\.?\d*)|(?:\.\d+)):匹配核心的数字/小数部分,覆盖两种合法格式:\d+\.?\d*:以数字开头,可带小数点及后续可选数字\.\d+:以小数点开头,后续必须跟至少一个数字
(?:[eE][+-]?\d+)?:可选的指数部分,支持大小写e/E,指数前可带正负号,且指数必须为整数$:锚定字符串结尾,避免匹配包含多余字符的非法串
可选调整
若需严格匹配无正号前缀的正数,可移除正则中的[+]?部分,修改为:
^(?:(?:\d+\.?\d*)|(?:\.\d+))(?:[eE][+-]?\d+)?$
内容的提问来源于stack exchange,提问作者system PAUSE
相关产品推荐
相关产品推荐

