gpt4 book ai didi

regex - 哪个是更好的非贪婪正则表达式或否定字符类?

转载 作者:行者123 更新时间:2023-12-03 18:38:12 25 4
gpt4 key购买 nike

我需要从字符串 @anything_here@ 匹配 @anything_here@dhhhd@shdjhjs@ 。所以我使用了以下正则表达式。

^@.*?@

或者
^@[^@]*@

两种方式都有效,但我想知道哪一种是更好的解决方案。具有非贪婪重复的正则表达式或具有否定字符类的正则表达式?

最佳答案

如果可能,通常应优先选择否定字符类而不是惰性匹配。

如果正则表达式成功,^@[^@]*@ 可以一步匹配 @ 之间的内容,而 ^@.*?@ 需要对 @ 之间的每个字符进行扩展。

当失败时(对于没有结尾 @ 的情况)大多数正则表达式引擎会应用一些魔法并在内部将 [^@]* 视为 [^@]*+ ,因为 @ 和非 @ 之间有明确的边界,因此它将匹配到字符串的末尾,识别丢失的 @ 而不是回溯,但立即失败。 .*? 将像往常一样扩展一个字符。

当在更大的上下文中使用时,[^@]* 也永远不会扩展到结尾 @ 的边界,而这对于惰性匹配来说很有可能。例如。 ^@[^@]*a[^@]*@ 不会匹配 @bbbb@a@^@.*?a.*?@ 会。

请注意, [^@] 也会匹配换行符,而 . 不会(在大多数正则表达式引擎中,除非在单行模式下使用)。您可以通过向否定添加换行符来避免这种情况 - 如果不需要的话。

关于regex - 哪个是更好的非贪婪正则表达式或否定字符类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41269297/

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