正则表达式匹配所有排除 block 注释

标签 regex comments notepad++

问题是我想匹配评论两侧的所有文本并排除评论本身。

有很多与“评论”相关的正则表达式帖子,但大多数是其他语言的(我正在使用 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/

    相关文章:

    Python re.search 首先按照结果

    regex - 使用 Google 脚本从电子邮件正文中提取信息

    c - Printf 和 scanf 要求输入。 BST 的循环错误

    javascript:编译器解释//作为正则表达式中的注释的一些问题

    notepad++ - Notepad++ 中代码折叠的自定义区域

    regex - 如何在 Notepad++ 中查找/替换斜杠之间的文本?

    regex - 如何在最后一次正则表达式匹配后清除行

    javascript - 如何编写正确的正则表达式以便 JSLint 进行验证?

    Xcode:评论中的链接可以点击吗?

    javascript - 带反向引用的正则表达式范围