Regex 如何使用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 '/\*[^*]*((\*($|[^/]

我试图在/usr/include/stdio.h中找到跨越多行的块注释数

我使用了两个grep命令:

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**/
我告诉过你很难进行负面展望。可能有办法做到这一点,但我还没弄明白。