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

简单正则表达式求反

  •  1
  • Jeriko  · 技术社区  · 14 年前

    我和一个雷鬼有麻烦,所以我想我会问这里。基本上,我需要它来匹配一个集合的URI,除了某个集合( /new )

    即。:

    /properties     # match
    /properties/25  # match
    /properties/new # rejected
    

    我尝试了以下变化,但没有效果:

    /properties(^(/new)).*
    

    我想我的问题是否定,但我不能完全摸索我该做什么。对解决方案的解释将非常感谢!

    3 回复  |  直到 14 年前
        1
  •  1
  •   Cfreak    14 年前

    ^ 在字符类(以任意顺序由 [ ] . 你需要使用 ?! . 你也不应该使用 .* . 它不会增加任何内容。如果你想匹配任何东西,就不要放任何东西:)。你也不需要捕捉比赛。根据您设置的方式,您可能还需要避开斜线。( / )

    试试这个:

    \/properties(?!\/new)

        2
  •  0
  •   Gumbo    14 年前

    你只需再加一个 RewriteCond :

    RewriteCond $2 !=new
    RewriteRule ^/properties(/(.*))?$ …
    

    这个会匹配的 /properties , /properties/ /properties/… 后面还有其他的但不是 /properties/new .

        3
  •  0
  •   CodingGorilla    14 年前

    这个怎么样:

    /properties(?!/new)(?:/.*){0,1}
    

    地址:`(?!/new)是一个否定的正向查找,基本上是说:确保这个不能匹配

    以下内容:(?:/.+)0,1允许匹配其他路径(即/25),是一个非捕获组,表示匹配/后跟零个或多个字符,并将其作为一个组零到一次匹配。_0,1允许匹配,即使没有/25。