Regex 如何使用grep查找多个行块注释的数量?
我试图在/usr/include/stdio.h中找到跨越多行的块注释数 我使用了两个grep命令:Regex 如何使用grep查找多个行块注释的数量?,regex,grep,Regex,Grep,我试图在/usr/include/stdio.h中找到跨越多行的块注释数 我使用了两个grep命令: egrep '/\*' /usr/include/stdio.h | egrep -cv '\*/' 仅使用一个正则表达式是否可以更优雅地完成此操作?如果您的grep版本(例如GNU grep)中支持PCRE,则最简单的方法是使用负前瞻 一般来说,使用扩展的RE进行负前瞻是困难的。以下内容很接近,但如果单行注释以***/结尾,则不起作用 grep -E '/\*[^*]*((\*($|[^/]
egrep '/\*' /usr/include/stdio.h | egrep -cv '\*/'
仅使用一个正则表达式是否可以更优雅地完成此操作?如果您的
grep
版本(例如GNU grep)中支持PCRE,则最简单的方法是使用负前瞻
一般来说,使用扩展的RE进行负前瞻是困难的。以下内容很接近,但如果单行注释以***/
结尾,则不起作用
grep -E '/\*[^*]*((\*($|[^/]))?[^*]*)*$'
如果您的
grep
版本(例如GNU grep)支持PCRE,则最简单的方法是使用负前瞻
一般来说,使用扩展的RE进行负前瞻是困难的。以下内容很接近,但如果单行注释以***/
结尾,则不起作用
grep -E '/\*[^*]*((\*($|[^/]))?[^*]*)*$'
如果你有
grep
和PCRE支持,你可以使用一个负前瞻来匹配/*
,它后面不跟*/
。但是它只能用扩展正则表达式来完成吗?用扩展RE进行负前瞻是很困难的。如果你有grep
和PCRE支持,您可以使用负前瞻来匹配/*
,后面不跟*/
。但是只能用扩展正则表达式进行匹配吗?用扩展RE进行负前瞻很难。如果注释中有两个“*”就不行了。例如,/*这是一条*多行*注释
(我说的是重新表达,你的PCRE示例有效)我修复了它,用(…)*
重复最后一部分,/*这是一条多行注释*asdfasdf**/
我告诉过你很难进行负面展望。可能有办法做到这一点,但我还没弄明白。如果评论中有两个“*”的话,这就行不通了。例如,/*这是一条*多行*注释
(我说的是重新表达,你的PCRE示例有效)我修复了它,用(…)*
重复最后一部分,/*这是一条多行注释*asdfasdf**/
我告诉过你很难进行负面展望。可能有办法做到这一点,但我还没弄明白。