如何从代码中删除C样式注释
How to remove C-style comments from code
我刚刚在SO上读到一个新问题,问的问题与我在标题中问的问题基本相同。这让我思考——并在网上搜索(当然,大多数点击都指向SO;)。所以我想-
应该有一个简单的正则表达式,能够从任何代码中删除C风格的注释
是的,这个问题/陈述在SO上有答案,但我发现的答案都不完整和/或过于复杂。
因此,我开始进行实验,并提出了一个适用于I可以想象的所有类型的代码的方法:
(?:'/'/(?:'''n|[^'n])*'n)|(?:'/'*(?:'n|'r|.)*?'*'/)|(("|')(?:''''|'''2|'''n|[^'2])*?'2)
第一个选项检查双斜杠//
注释。第二个是普通的CCD_ 2。第三个问题是,我很难找到处理相同任务的其他正则表达式-字符串包含字符串之外的字符序列,将被视为注释。
这部分所做的是捕获捕获组一中的任何字符串,将捕获组二中的引号与带引号的字符串相匹配,直到字符串的末尾。
捕获组1应保留在替换中,所有内容都被丢弃(为""
替换),留下未注释的代码:)。
下面是regex101中的一个C示例。
好的。。。所以这不是一个问题。这是一个你认为的答案。。。
是的,你是对的。所以…继续这个问题。
我是否遗漏了此regex可能遗漏的任何类型的代码
它处理
多行评论
/*
an easy one
*/
"行尾"评论
// Remove this
字符串中的注释
char array[] = "Following isn't a comment // because it's in a string /* this neither */";
这导致带转义引号的字符串
char array[] = "Handle /* comments */ - // - in strings with '" escaped quotes";
和带逃逸的字符串
char array[] = "Handle strings with **not** escaped quotes''"; // <-EOS
javscript单引号字符串
var myStr = 'Should also ignore enclosed // comments /* like these */ ';
线路连续
// This is a single line comment '
continuing on the next row (warns, but works in my C++ flavor)
那么,你能想出任何把这件事搞砸的代码案例吗如果你提出任何建议,我将尝试完成RE,希望它最终能完成;)
谨致问候。
PS。我知道。。。写这篇文章时,它在右侧窗格的如何提问下写道:我们更喜欢可以回答的问题,而不仅仅是讨论的问题这个问题可能违反了:S,但我无法抗拒。
事实上,对一些人来说,这甚至可能是一个答案,而不是一个问题。(太自大了?;)
我已经考虑了注释(到目前为止),并将正则表达式更改为:
(?:'/'/(?:'''n|[^'n])*'n)|(?:'/'*['s'S]*?'*'/)|((?:R"([^('''s]{0,16})'([^)]*')'2")|(?:@"[^"]*?")|(?:"(?:'?'?'|''''|''"|'''n|[^"])*?")|(?:'(?:''''|'''|'''n|[^'])*?'))
它处理Biffens C++11的原始字符串文字(以及C#逐字逐句的字符串),并根据Wiktors的建议进行了更改。
由于逻辑上的差异,将其拆分为单独处理单引号和双引号(并避免非工作反引用;)。
毫无疑问,它更复杂,但与我所看到的几乎不涉及字符串问题的解决方案相去甚远。它可以去掉不适用于特定语言的部分。
一条评论建议支持更多的语言。这将使RE(甚至更加)复杂和难以管理。不过,它应该相对容易适应。
更新了regex101示例。
感谢大家迄今为止的投入。并不断提出建议。
问候
编辑:更新原始字符串-这一次我实际阅读了规范;)
- 当包含另一个asp文件时,是否也包含所有引用的样式和脚本页面
- 将样式表插入iframe
- 跟踪在页面加载时应用内联样式的JavaScript
- 如果文本字段为空,则使用JavaScript应用CSS样式
- 定义完全独立的样式信息
- W3C循环样式的JavaScript
- jQuery/JavaScript在线公文包表单-打印样式表
- 使用递归、Ramda.js和无点样式重构字符串的getPermutations()
- FF和Chromium中CSS样式按钮的外观差异
- 如何首先设置样式<td>表中包含在窗体中的元素
- Visual Studio 2012:更改javascript注释样式
- 如何防止 TinyMCE 将 CDATA 添加到<脚本>标签中,并注释掉<样式>标签
- javascript中的注释样式
- 如何从代码中删除C样式注释
- /**/ 注释样式源自哪种语言
- 将 Javascript 点注释对象转换为基于数组的样式
- Node.js regex:在样式表中查找所有CSS属性,而不是在注释中
- 如何使用UglifyJS2在函数内部保留HereDoc样式的注释
- 条件注释只适用于样式表
- Do JavaScript样式注释必须在脚本标记之间进行