代码之家  ›  专栏  ›  技术社区  ›  Scorpion

后视时正则表达式匹配

  •  1
  • Scorpion  · 技术社区  · 7 年前

    我使用下面的正则表达式来匹配字符串;我期待着以下结果

    正则表达式 ^.*(?<!abc)(?<!def)(?<!ghi).xyz.co.*

        ghi.xyz.org
        ghi-hipqr.xyz.org
        abc-hipqr.xyz.org
    

    匹配

    qrs.xyz.org
    qrs-hipqr.xyz.org
    

    然而, ghi-hipqr.xyz.org 正在匹配正则表达式(不应该这样,因为后面有一个字符串ghi的查找,该字符串中存在ghi)。 我该怎么修?

    1 回复  |  直到 7 年前
        1
  •  1
  •   anubhava    7 年前

    它之所以失败是因为 ghi 不是在之前 .xyz. 在你的弦里。Java(像许多正则表达式引擎一样)不支持可变长度负长度look-behind断言。

    您可以改为使用此负先行表达式:

    ^(?!.*\b(?:abc|def|ghi)\b).*\.xyz\.org.*$
    

    RegEx Demo