如何解决如何从代码中删除C样式的注释
到目前为止,我已经考虑了评论并将正则表达式更改为:
(?:\/\/(?:\\\n|[^\n])*\n)|(?:\/\*[\s\S]*?\*\/)|((?:R"([^(\\\s]{0,16})\([^)]*\)\2")|(?:@"[^"]*?")|(?:"(?:\?\?'|\\\\|\\"|\\\n|[^"])*?")|(?:'(?:\\\\|\\'|\\\n|[^'])*?'))
它处理Biffens C ++ 11的原始字符串文字(以及C#逐字字符串),并且根据Wiktors的建议进行了更改。
由于逻辑上的差异(并避免无效的反向引用;),将其拆分为分别处理单引号和双引号。
无疑,它更复杂,但与我所见过的几乎不能解决任何 字符串问题 的解决方案相距甚远。并且可以剥离不适用于特定语言的部分。
有一条评论建议 支持 更多的语言。这将使RE(甚至更多)变得复杂且难以管理。不过,它应该相对容易适应。
到目前为止,感谢大家的投入。并不断提出建议。
问候
更新原始字符串-这次我实际上阅读了规范。;)
解决方法
我刚刚在此处阅读了一个新问题,询问的标题与我的基本相同。那让我开始思考-并在网络上搜索(当然,大多数点击都指向SO;)。所以我认为 -
应该有一个简单的正则表达式,能够从任何代码中删除C样式的注释。
是的,关于SO的这个问题/陈述有答案,但是我发现的答案都是不完整和/或过于复杂。
因此,我开始进行实验,并提出了一个可以在 我 能想象的所有类型的代码上运行的代码:
(?:\/\/(?:\\\n|[^\n])*\n)|(?:\/\*(?:\n|\r|.)*?\*\/)|(("|')(?:\\\\|\\\2|\\\n|[^\2])*?\2)
第一种选择检查 双斜杠 //
注释。第二个是 普通 的/* comment */
。第三个是我很难找到其他正则表达式来处理相同的任务处理的问题-
包含字符串之外的字符序列的字符串将被视为注释 。
这部分的作用是捕获捕获组1中的所有字符串,将捕获组2中的引号与引号匹配,直到字符串的末尾。
捕获组1应该保留在替换中,所有内容都丢弃(替换为""
),留下未注释的代码:)。
好…那不是问题。您认为这是一个答案…
你是对的。所以…这个问题。
我是否错过了此正则表达式会错过的任何类型的代码?
它处理
多行注释
/*
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但我无法抗拒。
实际上,对于某些人来说,它甚至可能是答案,而不是问题。(太自大了?;)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。