正则表达式注释



我有两种类型的注释///*...*/我需要匹配/*...*/并选择这些评论之间的所有数据。然后将//+添加到所有数据中,包括/*和*/,因此它看起来像:

//+/*
//+ line 1
//+ line 2
//+*/

同一个文件有标记为//的注释,这些注释不应该被选中。使用下面的正则表达式,它将挑选以/

开头的每一行

^[ t]*[/*] .*

^[ t]*[*/].*

标识/**/注释的开始和结束的正确正则表达式是什么?谢谢。

更新:可以有一个表达式来获得/**/的精确匹配吗?对于搜索/*,我使用/*.,但如果遇到//,它也会选择它。

我已经写了一篇完整的文章来解释注释的正则表达式。这不是一个微不足道的问题。最终结果是:

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

还有一个重要的警告值得指出:

其他元素中的注释

尽管我们的正则表达式很好地描述了c风格的注释,但是当某些内容看起来是注释但实际上是更大元素的一部分时,仍然存在问题。

someString = "An example comment: /* example */";
 
// The comment around this code has been commented out.
// /*
some_code();
// */

这个问题的解决方案是编写正则表达式来描述每个可能的大元素,找到这些元素,确定每个元素的类型,并丢弃那些不是注释的元素。有一些称为词法分析器或标记器的工具可以帮助完成这项任务。词法分析器接受正则表达式作为输入,扫描流,挑选出与正则表达式匹配的标记,并根据匹配的表达式对标记进行分类。正则表达式的贪心属性用于确保最长匹配。尽管为C编写一个完整的词法分析器超出了本文档的范围,但感兴趣的人应该看看像Flex和JFlex这样的词法分析器生成器。

正则表达式不是将块注释转换为行注释的正确方式。这个问题问的是如何用任何方法做到这一点。有一些工具可以比正则表达式做得更好。接受的答案推荐软件推荐。

最新更新