简单的正则表达式否定

时间:2010-11-09 15:10:56

标签: regex regex-negation

我正在使用正则表达式,所以我想我会在这里问。基本上,我需要它来匹配集合的URI,除了某个集合(/new)。

即:

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

我尝试过以下各种变体,但无济于事:

/properties(^(/new)).*

我认为我的麻烦在于否定,但我不能完全理解我的意图。对解决方案的解释将非常感激!

3 个答案:

答案 0 :(得分:1)

^否定字符类(由[ ]包围的任意顺序的一组字符。您需要使用?!。您也不应使用.*它没有添加任何东西。如果你想匹配任何你只是不要放任何东西:)。你也不需要捕捉比赛。根据您的设置方式,您可能还需要转义斜杠(/

试试这个:

\/properties(?!\/new)

答案 1 :(得分:0)

您只需使用其他RewriteCond

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

这将匹配/properties/properties//properties/…,后跟其他任何内容,但不是/properties/new

答案 2 :(得分:0)

这个怎么样:

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

:`(?!/ new)是否定正向查找,基本上是说:确保无法匹配

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