2015-03-31 23 views
0

我有以下的正則表達式重寫規則:如何讓一個正則表達式短

RewriteRule ^.*-d([0-9]+)/.*-c([0-9]+)/page-([0-9]+)/?$ 

應該檢測距離的網址具有這種格式的-d-cpage-表達後的數字:

http://localhost/tshirtshop/regional-d1/french-c1/page-2 

我只是想知道,爲什麼正則表達式不能被短接起來:

^.*[\-d\-c\page\-]([0-9]+)/?$ (which means beginning of the expression- any charachters repeated n times - '-d'or '-c' or 'page-' - the expression to be catched 
+0

我做了一些測試,我添加了像這樣的轉義斜線:^。* [[ - d \\ - c \ page \ - ]([0-9] +)但我仍然收到錯誤 – Bardelman 2015-03-31 09:26:10

+2

它依賴於在你的行動部分是什麼。如果你的目標需要單獨的兩個號碼,那麼你不能以這種方式縮短它。 – anubhava 2015-03-31 09:28:02

回答

1

您不能使用^.*[\-d\-c\page\-]([0-9]+)/?$,因爲它會捕獲比您預期的更少的數據。此外,「頁面」不會被捕獲,只有單個字母「p」,「a」,「g」,「e」。此外,\p是`不完整令牌,使正則表達式無效。

這是你的「固定」(剛剛看到的說明)縮短了正則表達式的regex101解釋:

​​

在htaccess的重寫規則,你無法通過子匹配迭代,你必須使用捕捉組爲了能夠在稍後的替換字符串中引用它們。

+0

這意味着我無法在括號內寫字符串。沒有辦法用字符串之間的OR編寫表達式? – Bardelman 2015-03-31 09:39:39

+1

你可以,但你會得到3個匹配,你將無法在替換字符串中引用它們。如果不能使用它返回的值,那麼更短的正則表達式有什麼用處? :) – 2015-03-31 09:44:04

+0

我明白了:)但我仍然好奇如何做到這一點! – Bardelman 2015-03-31 09:50:08