用于筛选c注释的正则表达式



对于与工具的合并,我只需要比较源行中未注释的部分。

因此,我尝试创建一个过滤器来检测实际的代码,即一个正则表达式,它匹配除注释之外的所有文本

也许是这样的:

^.*(?!((/**([^*]|[rn]|(*+([^*/]|[rn])))**+/)|(//.*)))

这个可以:

(/*([^*]|[rn]|(*+([^*/]|[rn])))**+/)|(//.*)

来源:http://ostermiller.org/findcomment.html.

或者使用非贪婪匹配:(/*([rn]|.)*?*/)|(//.*)

Amine的答案是正确的,但您也可以查找任何注释并将其从字符串中删除:

这个正则表达式会给你所有的评论:

(/*.*?*/)|//.*?n

这将用"替换匹配项(如果您使用c++):

std::string str2 = std::tr1::regex_replace(string, regex, "");

也许您的编译器可以提供帮助。有些人可能可以选择预处理源代码并删除注释。也许可以使预处理器仅剥离注释。这将是Unix让一个工具做对一件事的方式——C预处理器知道注释是什么(而regexen是解析的一个工具,IMNSHO)。

作为第二种选择,使用lexflex编写lexer来识别注释是很容易的。网上应该有很多例子。任何搜索引擎都会获得大量点击。

对于多行注释,请使用:

//*([sS]*?)*//mg

用于匹配单行注释:

///([sS]*?)[nr]?$/mg

或者将这两者组合以匹配所有注释/(/*(?<multiline>[sS]*?)*/)|(//(?<singleline>[sS]*?)[nr]?$)/mg

最新更新