我遇到了一個正則表達式的問題,所以我想我會問這裏。基本上,我需要它匹配一個集合的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