【发布时间】:2012-12-31 01:27:33
【问题描述】:
问题是我想匹配评论两边的所有文本并排除评论本身。
有很多与“cmets”相关的正则表达式帖子,但大多数都是其他语言的(我使用的是记事本++,维基百科告诉我是 POSIX ERE,我们不讨论语言或工具),并且大多数人专注于寻找 cmets,我已经做过了。
这将找到我想要的包含文本(这将包括匹配中的内部块注释):
(^)rule ((.|\n|\r)*?)(^)end
上面找到了“规则”和“结束”之间的任何内容,包括在内。很好。
这将找到块注释:
(?:/\*(?:(?:[^*]|\*(?!/))*)\*/)
上面找到介于/* 和*/ 之间的任何内容,包括两者。美好的。我不担心评论中是否有 */ 之一,这对我来说不是问题。
现在的问题是,我如何在上面的肯定规则匹配中间将块注释放入否定,以便它匹配 RULE 和 END 之间的所有内容,除了注释文本?
如果您的答案也排除了单行 // cmets,则加分。
【问题讨论】:
-
你想做什么?是否可以只使用您的块评论匹配模式然后删除匹配项?
-
实际上,最新版本的 notepad++ 使用了 Phillip Hazel 强大而健壮的 PCRE regex library,它提供了先进的 Perl 5 正则表达式结构。 Wiki 中的信息可能有点陈旧。关于您手头的问题 - 这可能无法使用单个正则表达式完成(取决于您正在编辑的源代码语言)。
-
在发布之前,我的想法是使用正面评论匹配并消除 cmets,这是我们将要做的,因为我们的样本集足够小。我发现类似的帖子也说这种情况正在突破正则表达式可以做的限制。感谢您的回复。干杯!
-
我不熟悉notepad++,但如果@ridgerunner 是正确的并且您可以使用PCRE 库,那么您可以使用单个正则表达式来执行此操作。我自己最近在这里用递归模式回答了 2 个问题,都使用了内部的环视规则。