我有这样的评论(几个例子):
//========================================================================
// some text some text some text some text some text some text some text
//========================================================================
// some text some text some text some text some text some text some text some text
// some text some text
// (..)
我想用这种风格的评论替换它:
/*****************************************************************************\
Description:
some text some text
some text some text some text
\*****************************************************************************/
所以我需要正则表达式。我设法制作了这个正则表达式:
//=+\r//(.+)+
它匹配组中的注释,但只匹配一行(示例1)。如何使它与许多行注释(如例2)?
感谢您的帮助
答案 0 :(得分:1)
使用sed:
sed -n '
\_^//==*_!p;
\_^//==*_{
s_//_/*_; s_=_\*_g; s_\*$_\*\\_;
h; p; i\
Desctiption:
: l; n; \_//[^=]_{s_//_\t_;p;};t l;
x;s_^/_\\_;s_\\$_/_;p;x;p;
}
' input_file
评论版:
sed -n '
# just print non comment lines
\_^//==*_!p;
# for old-style block comments:
\_^//==*_{
# generate header line
s_//_/*_; s_=_\*_g; s_\*$_\*\\_;
# remember header, add description
h; p; i\
Desctiption:
# while comment continues, replace // with tab
: l; n; \_//[^=]_{s_//_\t_;p;};t l;
# modify the header as footer and print
x;s_^/_\\_;s_\\$_/_;p
# also print the non-comment line
x;p;
}
' input_file
答案 1 :(得分:0)
此正则表达式匹配整个评论
(\/\/=+)(\s*\/\/ .+?$)+
答案 2 :(得分:0)
一个简短的perl脚本应该做你需要的,在评论中解释:
#!/usr/bin/perl -p
$ast = '*' x 75; # Number of asterisks.
if (m{//=+}) { # Beginning of a comment.
$inside = 1;
s{.*}{/$ast\\\nDescription:};
next;
}
if ($inside) {
unless (m{^//}) { # End of a comment.
undef $inside;
print '\\', $ast, "/\n" ;
}
s{^//}{}; # Remove the comment sign for internal lines.
}
答案 3 :(得分:0)
如果仍然需要正则表达式,不知道是否有更好的解决方案,这就是我想出的:
(?<=\/{2}\s)[\w()\.\s]+
应该获得所有感兴趣的文本。