2

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

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

也许是这样的:

^.*(?!((/\**([^*]|[\r\n]|(\*+([^*/]|[\r\n])))*\*+/)|(//.*)))
4

4 回答 4

1

这个会做:

(/\*([^*]|[\r\n]|(\*+([^*/]|[\r\n])))*\*+/)|(//.*)

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

或使用非贪婪匹配 : (/\*([\r\n]|.)*?\*/)|(//.*)

于 2012-08-23T10:44:23.337 回答
0

Amine 的回答是正确的,但您也可以找到任何评论并将其从字符串中删除:

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

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

这将用“”替换匹配项(如果您使用的是 c++):

std::string str2 = std::tr1::regex_replace(string, regex, "");
于 2012-08-23T10:47:41.817 回答
0

也许您的编译器可以提供帮助。有些人可能会选择预处理源代码和去除注释。也许可以使预处理器去除注释。这将是让一个工具正确完成一件事的 Unix 方式——C 预处理器知道注释是什么(而 regexen 是用于解析的工具,IMNSHO)。

作为第二种选择,编写带有lexflex识别注释的词法分析器很容易。网上应该有很多例子。任何搜索引擎都会出现大量点击。

于 2012-08-23T11:29:31.523 回答
0

对于多行注释,请使用:

/\/\*([\s\S]*?)\*\//mg

并用于匹配单行注释:

/\/\/([\s\S]*?)[\n\r]?$/mg

或将这两者结合起来以匹配所有评论 /(\/\*(?<multiline>[\s\S]*?)\*\/)|(\/\/(?<singleline>[\s\S]*?)[\n\r]?$)/mg

于 2020-11-18T12:50:41.107 回答