如何用C++ AST匹配含指定关键词的translate函数调用?
Clang AST匹配器:筛选参数含特定字符串的translate调用
要找出所有调用translate且第一个参数包含"Hello"的代码,你可以在现有匹配器基础上,给stringLiteral添加正则匹配规则来筛选字符串内容,具体修改如下:
修改后的匹配器代码
callExpr( callee(functionDecl(hasName("translate"))), hasArgument(0, stringLiteral(hasString(matches(".*Hello.*")))) );
关键说明
hasString(matches(".*Hello.*")):通过正则表达式.*Hello.*匹配所有内容中包含"Hello"子串的字符串字面量,.*表示任意长度的任意字符(包括空字符)- 如果需要大小写不敏感匹配,可将正则改为
".*[Hh]ello.*",部分Clang版本也支持通过matches(".*hello.*", ignoreCase)开启忽略大小写 - 若现有Clang版本不支持
matches,也可以尝试使用contains谓词,写法为stringLiteral(hasString(contains("Hello")))
内容的提问来源于stack exchange,提问作者LunaticJape
相关产品推荐
相关产品推荐

