gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 05:25:06 25 4
gpt4 key购买 nike

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

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

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com