我正在使用SED删除C风格的评论。
这是我正在使用的命令:
sed s:[/] [*]。* [*] [/] :: g
有两种我无法弄清楚的案例:
首先:
int x /* comment */ = 1; /* comment */
输出: int x
第二:多行评论
/* first line
second line */
输出:
/* first line
second line */
第一个问题是。*在中间,因为模式匹配是贪婪的,一旦第一个“/ ”匹配[/] [*],内部注释表达式匹配。和结束注释表达式匹配[*] [/]。
的结尾现在第二个问题是“。”与新行字符不匹配,但如果我添加一个新行字符,则会发生以下情况。
输入:
int x;
/* comment */
x = 1;
/* comment */
输出:
int x;
有些人可以告诉我如何使关闭标签不被。*或[\ s \ S] *消费吗?
答案 0 :(得分:1)
您可以使用python
执行此操作,请参阅此处:http://www.saltycrane.com/blog/2007/11/remove-c-comments-python/
实际上您也可以使用sed
执行此操作,但是,请参阅此处:http://sed.sourceforge.net/grabbag/scripts/remccoms3.sed
以下是一些perl
解决方案:http://perldoc.perl.org/perlfaq6.html#How-do-I-use-a-regular-expression-to-strip-C-style-comments-from-a-file%3f
HTH
答案 1 :(得分:1)
这是我能提出的一个正则表达式:\/\*(.*?)\*\/
输入:
`int x /* comment */ = 1; /* comment */
/* first line
second line */
int x;
/* comment */
x = 1;
/* comment */`
输出是:
$matches Array:
(
[0] => Array
(
[0] => /* comment */
[1] => /* comment */
[2] => /* first line second line */
[3] => /* comment */
[4] => /* comment */
)
[1] => Array
(
[0] => comment
[1] => comment
[2] => first line second line
[3] => comment
[4] => comment
)
)
答案 2 :(得分:0)
AWK:
awk -F"\033" -v RS="\034" '{gsub("\*\/","\034");gsub(/\/\*[^\034]*\034/,"");print}' input.c