Home: Perl Programming Help: Frequently Asked Questions:
How do I use a regular expression to strip C style



Jasmine
Administrator

Mar 15, 2001, 6:02 AM


Views: 29950
How do I use a regular expression to strip C style

How do I use a regular expression to strip C style comments from a file?

While this actually can be done, it's much harder than you'd think. For example, this one-liner


Code
    perl -0777 -pe 's{/\*.*?\*/}{}gs' foo.c

will work in many but not all cases. You see, it's too simple-minded for certain kinds of C programs, in particular, those with what appear to be comments in quoted strings. For that, you'd need something like this, created by Jeffrey Friedl:


Code
    $/ = undef; 
$_ = <>;
s#/\*[^*]*\*+([^/*][^*]*\*+)*/|("(\\.|[^"\\])*"|'(\\.|[^'\\])*'|\n+|.[^/"'\\]*)#$2#g;
print;

This could, of course, be more legibly written with the /x modifier, adding whitespace and comments.