gpt4 book ai didi

c++ - 如何检测代码中的字符串文字?

转载 作者:太空狗 更新时间:2023-10-29 21:21:34 24 4
gpt4 key购买 nike

我想为我的混淆器编写字符串检测功能,我一直在调试它,我可以为字符串编写模式,如 cout<<"Hello world"cout<<"2+2=4"

但不是为了

cout<<"2+2"<<"Trolll";
cout<<"asd \" trololo";

我只是想提取“和”之间的东西,其实我试过了

["][\x20-\x74]*["]

但例如

cout<<"asdfg"<<"asdsfgh";

它给了我 "asdfg"<<"asdfgh" , 不是 "asdfg" .

关于如何构建字符串提取表达式的任何想法?

最佳答案

默认情况下,正则表达式是贪婪的。这意味着他们会尝试尽可能匹配。有几种方法可以防止这种情况。最简单的方法就是让它们非贪婪。您可以通过附加 ? 使量词 * 成为非贪婪的:

"[\x20-\x74]*?"

(顺便说一句,引号两边不需要 […]。)

但是,明确和准确的描述是有帮助的。原因之一是上面的表达式仍然有问题。例如,它没有正确匹配 "\""

C++ 中的字符串文字定义非常明确,而您的定义根本不符合它。实际定义(标准的第 2.14.3 节)是(简化的):一个 char-sequence" 包围,其中 char-sequence 是零个或多个字符的序列,"\ 和换行符或 转义序列 除外。

转义序列` 又被定义为简单八进制十六进制。总而言之,这给我们留下了(再次,稍微简化):

"([^"\\]|\\(['"?\\abfnrtv]|[0-7]+|x[0-9a-fA-F]+))*"

– 现在不需要非贪婪说明符,因为我们明确地将 " 排除在较早的匹配之外,除非进行了转义。

关于c++ - 如何检测代码中的字符串文字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22275108/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com