Perl one liner删除注释,删除不是注释的行

时间:2014-11-27 05:05:18

标签: regex perl

我使用perl one liner从C文件中删除注释,但它也删除了在单词之间有asterik(*)的行,例如

static void *

这是我正在使用的一个班轮:

'perl -0777 -pe ''s{/\*.*?\*/}{}gs'' ' sourceFile ' > ' destFile

有人可以建议吗?

由于

3 个答案:

答案 0 :(得分:2)

这个问题在perlfaq中得到解答。

“如何使用正则表达式从文件中删除C样式注释?”

http://perldoc.perl.org/5.8.9/perlfaq6.html#How-do-I-use-a-regular-expression-to-strip-C-style-comments-from-a-file

答案 1 :(得分:0)

也许something like this

s{/\*((?!\*/).)*\*/}gs

“寻找/*,向前看,看不到*/序列并吃一个字符,重复看看直到*/

但请注意,由于注释可以嵌套或/* */括在引号中,因此您永远无法使用正则表达式可靠地解析它们。

答案 2 :(得分:0)

你的正则表达式对我有用。我刚刚纠正了你的引用,我不知道你是否正在使用它,或者它是一个复制和粘贴的人工制品。

perl -0777 -pe 's{/\*.*?\*/}{}gs' sourceFile.c >destFile.c

(我在linux上使用bash。)

Ideone上试用。