gpt4 book ai didi

regex - 正则表达式贪婪匹配没有按预期工作

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

我有一个非常基本的正则表达式,但我无法弄清楚为什么它不起作用,所以问题分为两部分。为什么我当前的版本不起作用,正确的表达是什么。

规则非常简单:

  • 必须至少有 3 个字符。
  • 如果 % 字符是第一个字符,则必须至少为 4 个字符。

  • 因此,以下情况应按如下方式进行:
  • AB - 失败
  • ABC-通
  • ABCDEFG - 通过
  • % - 失败
  • %AB - 失败
  • %ABC - 通过
  • %ABCDEFG - 通过
  • %%AB - 通过

  • 我使用的表达是:
    ^%?\S{3}

    这对我来说意味着:
  • ^ - 字符串开头
  • %? - 贪婪检查 0 或 1 % 字符
  • \S{3} - 其他 3 个不是空格的字符

  • 问题是, %?出于某种原因没有做贪婪的检查。如果 % 字符存在,则它不会吃掉 % 字符,因此 '%AB' 案例正在通过,我认为应该失败。为什么是 %?不吃 % 字符?

    有人请给我看灯:)

    编辑:我使用的答案是下面的 Dav: ^(%\S{3}|[^%\s]\S{2})虽然这是一个两部分的答案,艾伦真的让我明白了为什么。我没有用他的版本 ^(?>%?)\S{3}因为它有效,但在 javascript 实现中无效。两个很好的答案和很多帮助。

    最佳答案

    如果可以,正则表达式将始终尝试匹配整个模式 - “贪婪”并不意味着“如果存在则始终抓取字符”,而是意味着“如果存在则始终抓取字符 并且匹配可以用它抓起 ”。

    相反,您可能想要的是这样的:

    ^(%\S{3}|[^%\s]\S{2})

    这将匹配 % 后跟 3 个字符,或非 %、非空格后跟 2 个字符。

    关于regex - 正则表达式贪婪匹配没有按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1413587/

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