【问题标题】:Regex - how to tell something NOT to match? [duplicate]正则表达式 - 如何告诉不匹配的东西? [复制]
【发布时间】:2011-02-27 09:47:45
【问题描述】:

如何创建一个不匹配的正则表达式?例如,我想用正则表达式匹配不是字符串“www.petroules.com”的所有内容。

我尝试了[^www\.petroules\.com],但这似乎不起作用。

【问题讨论】:

    标签: regex


    【解决方案1】:
    ^(?!www\.petroules\.com$).*$
    

    将匹配除www.petroules.com 之外的任何字符串。这称为negative lookahead

    [^www\.petroules\.com]
    

    表示“匹配一个字符,除了 w、p、e、t、r、o、u、l、s 或点”。

    【讨论】:

    • 正是我所需要的,谢谢。当您提交第一个正确答案后,将在大约 10 分钟内接受。
    • .*$ 是一个 noop,可以省略。
    • 好的,但是当然匹配结果将是一个空字符串(匹配成功)。如果您只是检查是否有可能匹配,那么这无关紧要。所以是的,省略.*$,你就完成得更快了。
    • 好点。我没有考虑比赛结果。所以,.*$ 可能 是一个 noop,也可能不是,这取决于。
    • @Wayne,在这种特殊情况下,正则表达式只会匹配整个输入字符串或根本不匹配,因此没有真正的理由实际匹配字符串,因为您已经知道匹配的内容成为。当然,在其他情况下,实际匹配可能很重要。
    【解决方案2】:
    (?!...)
    

    这称为负前瞻。仅当正则表达式 ... 不匹配时才会匹配。但是,请注意它不消耗字符。这意味着如果您在 ) 之后添加任何其他内容,它将立即开始匹配,即使是作为否定前瞻一部分的字符。

    【讨论】:

      猜你喜欢
      • 2020-10-13
      • 1970-01-01
      • 1970-01-01
      • 2012-11-12
      • 2016-10-19
      • 2011-10-28
      • 1970-01-01
      • 2014-09-30
      相关资源
      最近更新 更多