使用正则表达式在C ++源代码中查找字符串文字,但不包括?
|
我想在现有应用程序中介绍i18n。第一步,我需要将字符串文字替换为“ 0”。
我创建了以下正则表达式来提取字符串:
(?<!#include)\"([^\"\\\\]|\\\\.)*\"
但是,这不起作用。没有否定的后顾之忧,它确实可以正确匹配字符串,但是还引用了我想避免的包含在内。我对负面的回望不是很熟悉,我只是在这里抬头。
例:
#include \"hello.h\" // should NOT match \"\\\"hello.h\\\"\"
printf(\"Hello\"); // should match \"\\\"Hello\\\"\"
cout << \"hello\" << \"hello\" << \"hello\"; // should match each three \"\\\"hello\\\"\"\'s
如何正确执行此操作?
没有找到相关结果
已邀请:
3 个回复
凡夕
它可以直接工作(无组)。它还支持字符串中的转义引号。这里唯一的约束是#include和文件名之间的一个空格。这是因为QTcreator不支持负向后面的量词。 虐待尝试修复它。但不确定病态能否成功。
痰嫉
引号中的字符串由组捕获。 在Java中:
夏瓤跋棘
这将执行以下操作:
regex是带有\\ v的vim-regex,使其更自然(转义更少)。简而言之,它使用了我最初想要的否定性后缀,语法略有不同。 现在,我只需要为打开的缓冲区(在命令模式下)运行此宏即可:
问题(这就是为什么它只是一个“解决方案”的原因)是,每当vim遇到正则表达式失败的缓冲区(即文件中没有字符串文字)时,它都会停止重复宏。我找不到解决方法。幸运的是,我只有几个这样的文件,因此可以手动重新运行上述命令以再次开始重复该宏,从而摆脱困境。