问题是我想匹配评论两侧的所有文本并排除评论本身。
有很多与“评论”相关的正则表达式帖子,但大多数是其他语言的(我正在使用 Notepad++ ,维基百科告诉我是 POSIX ERE,我们不讨论语言或工具),而且大多数都专注于查找评论,我有完成了。
这将找到我想要的包含文本(这将包括匹配中的内部块注释):
(^)rule ((.|\n|\r)*?)(^)end
以上找到了“规则”和“结束”之间的任何内容,包括在内。美好的。
这将找到块注释:
(?:/\*(?:(?:[^*]|\*(?!/))*)\*/)
以上找到了
/*
之间的任何内容和 */
, 包括的。美好的。我不担心是否有 */
之一在评论中,在我的情况下不是问题。现在的问题是我如何将块注释放入上面正规则匹配中间的否定中,以便它匹配
RULE
之间的所有内容和 END
除了注释文本?如果您的答案不包括单行,则加分
//
评论也是如此。
最佳答案
首先让我说:正则表达式不是用来做这个的!
但这并非不可能:它可以通过递归正则表达式完成:
当然只捕捉“一切”
翻译成:
^rule((?:.|\r|\n)*?)(?:^end|(?:(?://$|/\*(?:(?:[^*]|\*(?!/))*)\*/)))
^
put cursor there
and insert
((?:.|\r|\n)*?)(?:^end|(?:(?://$|/\*(?:(?:[^*]|\*(?!/))*)\*/)))
or end with
(?:\r?\n^end)
然后替换为
1 美元 2 美元 3 美元 4 美元..
其中替换次数应与递归次数相匹配
为了测试 Notepad++ 的限制,我创建了这个 fiddle :
http://jsfiddle.net/lovinglobo/wPKjb/
Notepad++ 通过简单地说“无效的正则表达式”中断了超过 29 次递归。
关于正则表达式匹配所有排除 block 注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14363303/