2016-01-24 50 views
-1

如何在/ blog之後包含所有內容,但不應包含wp-content和wp-includes之類的詞?Regular Express - 模式匹配

目前顯示所有使用正則表達式:

^/blog/* 

我試過,但沒有運氣:

^/blog/(!(wp-content&&wp-includes))* 

的url:

example.com/blog/content (should include) 
example.com/blog/page/2 (should include) 
example.com/blog/wp-content/ (shouldn't include) 
example.com/blog/wp-includes/ (shouldn't include) 
+3

的開始匹配你貼一個故事,而不是一個問題。 – Maroun

+0

不知道你在說什麼,但是會猜測'^/blog /(。(?! wp-content | wp-includes))* $'是你正在尋找的東西。 – ndn

+0

@MarounMaroun哈哈,我的壞。我編輯了我的問題。看看,讓我知道你是否可以回答。 – Chopra

回答

2

你的第一個正則表達式

^/blog/* 

意思是一個字符串,從/blog開始,即零個或多個之後的正斜槓。我猜你剛纔的意思

^/blog 

^/blog/.*$ 

至於如何排除這兩個詞:

^/blog(.(?!wp-content|wp-includes))*$ 

的想法是在推進一個字符時間(.),檢查wp-contentwp-includes之後不跟隨使用negative lookahead ((?!))直到字符串的末尾($)。


如果你想確保blog後斜線有沒有重複的正則表達式,你可以先放負先行,然後開始匹配字符:

^/blog/(?!.*(wp-content|wp-includes)).*$ 

這首先保證了沒有wp-contentwp-includes之後任何字符(.*)然後繼續匹配。

+2

@downvoter,你能解釋一下嗎? – ndn

+1

我很樂意聽到@downvoter的解釋,所以我們都可以從錯誤中學習。 – Maroun

+2

^/blog /(?!。*(wp-content | wp-includes))。* $ - 這一個工作。謝謝@ndn – Chopra

0

您可以使用排除模式是這樣的:

/blog(/(?!wp-content|wp-includes).*) 

如果匹配的語義是「網址內部」,那麼你很可能只是想匹配的非空白字符:

/blog(/(?!wp-content|wp-includes)\S*) 

,如果有比2更 「WP-」 例子:

/blog(/(?!wp-)\S*) 

..not使用^因爲你的例子並不在字符串

https://regex101.com/r/gP4eZ7