regex 如何在eclipse replace中将C风格printf转换为C++风格cout

toiithl6  于 2023-06-25  发布在  Eclipse
关注(0)|答案(3)|浏览(136)

我想将C风格的LOGD("hello");转换为LOGD<<"hello";
在Eclipse中查找/替换。
我该怎么做?

fbcarpbf

fbcarpbf1#

您可以在正则表达式模式下尝试以下查找和替换:

查找:

LOGD\("([^"]*)"\);

替换:

LOGD << "$1";

我们在代码中捕获输入到LOGD中的字符串的文本,然后在替换中将其用作<<运算符的RHS。(第一)捕获组作为$1可用。

myss37ts

myss37ts2#

虽然regexp可能没问题,但我建议使用宏或更好的模板内联函数,而不是regexp转换:

#define LOGD(x) LOGD_CPP<<(x)

template<typename X> inline void LOGD(const X &x) {LOGD_CPP<<x;}

原因是为了符合x内部可能的语法复杂性(嵌套括号,lambda函数等)。

rdrgkggo

rdrgkggo3#

可以在Eclipse中使用基于正则表达式的查找/替换,
如果搜索条件为

LOG(.*?)\((.*?)\)

并替换为

LOG\1 << \2

这将在日志中找到所有级别,如调试、信息警告错误等

LOGD("DEBUG:hello");
LOGW("WARNING:World"); 
LOGE("ERROR:Fooo"); 
LOGI("INFO:Fooo);

并将其替换为

LOGD << "DEBUG:hello";
LOGW << "WARNING:World"; 
LOGE << "ERROR:Fooo"; 
LOGI << "INFO:Fooo;

相关问题