我的任务是(尝试)在大型代码库中搜索和替换单词后缀,仅当它出现在评论中时。所有注释都是 /* 或 // 类型,但它们保证包括大多数可以想象的边缘情况。
所以我想改变这个:
/* blah blah something__suffix blah */
对此:
/* blah blah something blah */
但我也想改变这一点:
// blah blah something__suffix blah
对此:
// blah blah something blah
和这个:
/*
* blah blah something__suffix blah
*/
对此:
/*
* blah blah something blah
*/
和这个:
/**
// blah blah something__suffix blah
*/
对此:
/**
// blah blah something blah
*/
令人作呕(字面意思)。
最初我觉得这是一个解析器任务,我安装了 cochinelle,它确实可以解析我的评论,但它被我的预处理器宏卡住了,对于那些只是把它作为一次性任务的人来说,解决方法似乎很复杂。所以现在我正在考虑正则表达式。
我还没有找到很多关于在 C 和 C++ 注释中使用正则表达式进行真正强大的搜索和替换的建议(除了“你需要一个解析器”),但我确实注意到似乎有一个经过良好道路测试的 perl perl FAQ 上的脚本,用于在此处删除这两种样式的注释。
如下:
$/ = undef;
$_ = <>;
s#/\*[^*]*\*+([^/*][^*]*\*+)*/|//([^\\]|[^\n][\n]?)*?\n|("(\\.|[^"\\])*"|'(\\.|[^'\\])*'|.[^/"'\\]*)#defined $3 ? $3 : ""#gse;
print;
我的问题:如何调整这个脚本,而不是剥离评论,然后可以搜索已被识别为评论的文本以查找后缀并删除后缀,从而使评论的其余部分保持不变?