2016-09-18 66 views
0

我正在嘗試爲重定向規則編寫一個正則表達式,該規則將包含2010到2012年的文件夾,但排除兩個非常特定的頁面slu。。我的網址是設置如下所示:開始但不包含的正則表達式

/2016/09/18 /我的頁面 - 塞/

這兩個網頁:

/2011/04/11 /一些頁/ /2012/06/15/another-page-2/

我有類似於^/2010 | 2011 | 2012 /.*的匹配所有在那些年份開始的子目錄,不確定如何爲那些頁面slu。。

我可能需要負面看起來像(?!some-page | another-page-2),但不知道如何設置它。

+0

你必須使用一個負向前看,以匹配不包含字符串的內容。 – Barmar

+0

查看http://stackoverflow.com/questions/33639856/regex-combine-negative-lookahead-and-regular-search – Barmar

+0

@Barmar感謝這非常有幫助。它明確指出了我的正確方向。真正幫助我的是我用來測試正則表達式的變體的debuggex鏈接,直到我得到正確的答案。 – user3376065

回答

1

爲什麼不直接寫兩個正則表達式呢?我的意思是,如果你想要,

^\/201[012]\/\d*\/\d*\/(?!(some-page|another-page-2)) 

對這些字符串中的任何一個做一個否定的期待。

你必須非常具體地說明如何匹配字符串以及它們在哪裏彈出頁面。因爲你需要確保其他一些東西,如.*不能已經吃掉你想要處理的東西。因此,您需要指定目錄,以便它必須跟隨slug頁面,然後執行負向預測。你會注意到它會停止工作,如果你做了類似.*(反向預測)的事情,因爲.*會貪婪地匹配所有內容,然後是$,因此所有的優點和負面匹配都不會打折字符串。

0

所以這裏的人誰是有興趣的什麼工作:

^/(?!.*slug1/|.*slug2/)(?:2010|2011|2012)(.*)$ 

真正幫助我正確的答案是這樣的網站,可以讓你很方便地測試你的正則表達式:https://www.debuggex.com/