如何编写RE2C格式正则匹配合法二进制字面量(无尾部下划线)
解决RE2C正则匹配二进制字面量的尾部下划线问题
问题背景
要编写RE2C格式的正则表达式,用于匹配合法的二进制字面量。合法示例包括:0b1、0b101、0b1111、0b11_11、0b1_111、0b1_1_1_1。下划线的使用规则是:仅作为数字之间的分隔符,不能出现在开头或结尾,且不能有两个及以上连续下划线。
当前使用的正则表达式为:
BINARY_NUM = "0b" ("0"|"1") ("_"? ("0"|"1"))*;
该正则会错误匹配带有尾部下划线的内容,例如0b1_0_这类不符合规则的字符串。
修改后的正确正则
BINARY_NUM = "0b" ("0"|"1") ( "_" ("0"|"1") )*;
逻辑说明
- 保留原逻辑中以
0b开头、紧跟一个二进制数字(0或1)的部分 - 将后续的
("_"? ("0"|"1"))*替换为( "_" ("0"|"1") )*,这意味着:后续如果出现下划线,必须紧跟一个二进制数字,从根源上避免了尾部出现下划线的可能——最后一位只能是数字,不可能是下划线 - 同时该写法天然规避了连续下划线的情况:因为下划线后必须跟数字,无法形成
__这样的连续下划线组合,完全符合规则要求
内容的提问来源于stack exchange,提问作者Dess
相关产品推荐
相关产品推荐

