提问者:小点点

{fmt}库:如何使用正则表达式添加编译时字符串检查?


我正在使用Howard Hinnart的{fmt}库进行打印。

不幸的是,我的程序在几天后崩溃了,因为我有一个无效的格式字符串。 很容易修复--但如果有更多呢?

可以对字符串格式进行编译时检查,这将捕获此错误:

// Replace this:
fmt::print("{}",42)
// With this:
fmt::print(FMT_STRING("{}"),42)

我可以在整个代码库中手动完成大约1000个print语句。

但我想知道--在Visual Studio中,有没有一种方法可以使用正则表达式和查找/替换来实现这一点?

我已经使用了。NET RegEx tester和字符串匹配:

print[(]".*".*[)];

然而,在我尝试了许多小时之后,一个强大的搜索和替换功能仍然没有实现。


共1个答案

匿名用户

在VSCode中,这样做是有效的:

模式:.*(fmt::print\()“\{\}”(,.*\)).*

替换:$1FMT_String(“{}”)$2

如果您是一个Python爱好者,如果您将C++脚本作为字符串读入,那么这也是可行的:

import re

pattern = '.*(fmt::print\()"{}"(.*\)).*'
fmt_snippet = 'fmt::print("{}",42)'
re.sub(add_part_pattern, r'\1FMT_STRING("{}")\2', a)