2012-08-23 93 views
2

对于与工具的合并,我只需要比较源代码行的非注释部分。过滤器c注释的正则表达式

所以我尝试创建一个检测实际代码的过滤器,即匹配所有文本的正则表达式,其中除了评论。

也许是这样的:

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

回答

1

这人会做的事:

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

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

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

+0

这没有帮助。我需要排除评论。 – LmaBach

+0

@LmaBach在比较文件之前不能剥离它们吗? –

+0

不,因为我只需要在合并视图中忽略注释。但在结果我想要评论回来。 – LmaBach

0

胺的答案是正确的,但你也可以找到的任何意见,并从字符串中删除:

此正则表达式会给你所有评论:

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

这将替换与匹配“ “(如果你使用C++):

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

STL正则表达式不关心多行字符串吗? –

+0

我需要用一个表达式来否定“查找所有评论”。 – LmaBach

0

也许你的编译器可以提供帮助。有些人可能会有一个选项来预处理源文件并删除注释。也许预处理器可以制作成只有条评论。这将是Unix的一种方式,让一个工具正确地做一件事 - C预处理器知道评论是什么(而正则表达式是解析的一种方式,IMNSHO)。

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

+0

我使用keil C51编译器,它没有这种可能性。要么我可以编写一个程序,在合并之前删除注释。但是这会产生比解决问题更多的问题,因为我不想放弃合并结果中的注释。 – LmaBach