正则表达式匹配所有注释 //, /* */
Posted
技术标签:
【中文标题】正则表达式匹配所有注释 //, /* */【英文标题】:regex to match all comments //, /* */ 【发布时间】:2017-05-22 00:14:33 【问题描述】:我正在尝试编写正则表达式来查找给定文件中的所有 cmets。我应该处理的 cmets 是多线通信,例如
/* comments.
is multiline comment*/
或
// one liner comment.
我搜索了几个地方,并找到了一些答案。 (one answer) 我设法写了一些可以满足我大部分需求的东西:
(/\*([^*]|[\r\n]|(\*+([^*/]|[\r\n])))*\*+/|//.*\n?)
我的代码唯一有问题的是它在字符串中捕获了 cmets。例如
String str = " hey, // I'm not a comment "
我的代码得到“我不是评论”但它不应该。 我尝试了几种方法,例如negativelookahead 和lookbehind,但似乎没有任何效果。
有什么方法可以做我想做的事吗?/ 谢谢。
编辑: 我使用的语言是python
【问题讨论】:
在这种情况下,将 python 标签添加到您的问题中。 不要使用正则表达式来解析编程语言。正如您所注意到的,正则表达式无法做到这一点。这是一个硬性限制,没有变通方法,无论如何尝试这样做的每个解决方案都是不正确的。 【参考方案1】:通常,请考虑使用解析器(以考虑嵌套 cmets 等)。话虽如此,如果支持 (*SKIP)(*FAIL)
构造,您可以使用它(您没有指定您的编程语言):
"[^"]+"(*SKIP)(*FAIL)
|
'[^']+'(*SKIP)(*FAIL)
|
(?|
//(?P<comment>.+)
|
/\*(?P<comment>[\s\S]+?)\*/
)
见a demo on regex101.com。
【讨论】:
我在用 python 写。我不知道这种语法,如果我试图在我的程序中使用您的代码(可能是因为您为另一种语言编写),它就不起作用。 python也有这样的东西吗? 有,使用较新的regex
模块 (pip install regex
) 并为上面的正则表达式使用详细模式。以上是关于正则表达式匹配所有注释 //, /* */的主要内容,如果未能解决你的问题,请参考以下文章