如何使用clang-query查找包含指定子串的字符串字面量?
使用clang-query筛选包含指定子串的字符串字面量
你要实现的需求可以直接通过stringLiteral匹配器的内置hasSubstring参数完成,不需要额外嵌套其他遍历匹配器。
核心匹配规则
匹配所有包含子串hello的字符串字面量的语句为:
match stringLiteral(hasSubstring("hello"))
针对你给出的示例代码,这个规则只会命中"say hello"这一个字符串字面量,不会匹配到变量声明里的hello标识符,也不会命中不包含目标子串的"say world",完全符合预期。
扩展用法
- 若需要精确匹配整个字符串的内容,将
hasSubstring替换为equals即可:stringLiteral(equals("hello"))只会匹配值完全为hello的字符串字面量 - 若需要忽略大小写匹配子串,使用
hasSubstringCaseInsensitive参数:stringLiteral(hasSubstringCaseInsensitive("Hello"))可以同时匹配hello、HELLO等不同大小写的子串
使用步骤参考
- 启动clang-query后先指定编译数据库路径(如果项目使用compile_commands.json):
set build-path ./你的编译目录
- 执行上述匹配规则,输出结果会自动返回所有命中的字符串字面量的所在文件、行号、对应代码内容等信息。
内容的提问来源于stack exchange,提问作者Mikhail
相关产品推荐
相关产品推荐

