如何用正则匹配Solidity文件中的mapping(address => uint) public lockedAddresses结构
如何正确匹配Solidity中的
lockedAddresses Mapping声明? 嘿,我看你在尝试用正则匹配Solidity代码里的mapping(address => uint) public lockedAddresses;但没成功,原来的表达式有几个关键问题,我来帮你修正并解释清楚:
原正则的问题点
- 你用的
([\w\s=>\d])是匹配单个字符,但你需要匹配的是address => uint这样的完整类型序列,字符集里的=>只是把这两个字符加入了可匹配的单个字符列表,没法识别成一个整体组合 - 没有转义括号
():正则里的括号是用于分组的特殊字符,要匹配代码里实际的括号,必须用\(和\)转义 - 末尾缺少分号
;:目标代码行的结尾是有分号的,原正则没包含这个部分,导致无法完全匹配整行
正确的正则表达式
mapping\s*\(address\s*=>\s*uint\)\s+(public\s+)?lockedAddresses;
正则各部分解释
mapping\s*:匹配关键字mapping,并允许后面跟任意数量的空白字符(空格、制表符都算)\(:转义后匹配代码里的左括号(address\s*=>\s*uint:匹配address、任意空白、=>、任意空白、uint的完整类型映射结构\):转义后匹配代码里的右括号)\s+:匹配括号后至少一个空白字符(public\s+)?:可选匹配public关键字和后面的空白(问号表示这个分组是可选的,也就是不管有没有public都能匹配)lockedAddresses;:精确匹配变量名和结尾的分号
用这个正则去匹配你给出的示例代码,就能精准命中mapping(address => uint) public lockedAddresses;这一行啦~
内容的提问来源于stack exchange,提问作者Stepan Poperechnyi
相关产品推荐
相关产品推荐

