我遇到了一个正则表达式的问题,所以我想我会问这里。基本上,我需要它匹配一个集合的URI,除了某个(/new
)。简单的正则表达式否定
即:
/properties # match
/properties/25 # match
/properties/new # rejected
我已经试过以下变化,但无济于事:
/properties(^(/new)).*
我觉得我的麻烦是否定的,但我不能完全神交什么我打算这样做..解决方案的解释将非常感谢!
我遇到了一个正则表达式的问题,所以我想我会问这里。基本上,我需要它匹配一个集合的URI,除了某个(/new
)。简单的正则表达式否定
即:
/properties # match
/properties/25 # match
/properties/new # rejected
我已经试过以下变化,但无济于事:
/properties(^(/new)).*
我觉得我的麻烦是否定的,但我不能完全神交什么我打算这样做..解决方案的解释将非常感谢!
你可以简单地使用一个额外的RewriteCond
:
RewriteCond $2 !=new
RewriteRule ^/properties(/(.*))?$ …
这将匹配/properties
,/properties/
和/properties/…
其次是任何东西,但不/properties/new
。
这个怎么样:
/properties(?!/new)(?:/.*){0,1}
的:`(/新?!)是负正向查找,并且实际上是说:要确保这个不能匹配
如下:(? :/.+){0,1}允许匹配其他路径(即./25),并且是一个非捕获组,表示匹配/后跟零个或多个字符,并将其匹配为0到1次组。即使没有/ 25,{0,1}也可以匹配。
你不需要'(?:/.*){0,1}。如果你不想捕捉,留下空白就是你所要做的。正则表达式的每个部分都是一个规则。如果所有规则都表示匹配并且没有更多规则,那么引擎将显示该行匹配。另外。*从来不是一个好主意。 – Cfreak 2010-11-09 15:26:16
好的一点,'/ new'的前瞻性是他需要防止这种匹配的。谢谢你的提示。 – CodingGorilla 2010-11-09 15:28:18
''^仅意味着内部'[]'否定。通常这意味着“开始行”。 – sepp2k 2010-11-09 15:14:15
@ sepp2k:...只有在开启后立即使用'['。 – Gumbo 2010-11-09 15:20:02