2010-04-21 79 views
3

我使用preg_replace創建基於modrewrite的分頁鏈接的網址。 我使用:preg_replace只匹配部分

$nextURL = preg_replace('%/([\d]+)/%','/'.($pageNumber+1).'/',$currentURL);

工作正常,但是我在想,如果有,而不必包括在更換參數'/'更好的辦法。由於網址有時可能包含除頁面部分以外的其他數字,因此我需要將該數字與兩個/之間的數字相匹配。這些數字從來都不是唯一的數字,所以/[\d]+/阻止它們被取代。

回答

8

你可以使用look-around assertions

%(?<=/)([\d]+)(?=/)% 

(?<=…)是一個積極的向後看斷言和(?=…)積極的前瞻主張。正則表達式(?<=/)([\d]+)(?=/)將被解釋如下:

  • (?<=/) - 如果在所述當前位置
  • ([\d]+)後面/ - 匹配一個或多個數字
  • (?=/) - 但僅當有一個/之後

您也可以簡化表達如下:

preg_replace('%(?<=/)\d+(?=/)%', $pageNumber+1, $currentURL) 
+0

1表達可以進一步被簡化爲只'%(?<= /)\ d +(?= /)%',沒有必要把所有的括號'\ D'。 – 2010-04-21 10:49:55

+0

謝謝,我知道有這樣的事情,但我不記得他們被稱爲什麼或他們如何工作。 – ianbarker 2010-04-21 10:51:11

+0

+1,你打敗了我。 – YOU 2010-04-21 10:51:38

2

嘗試

$nextURL = preg_replace('%(?<=/)([\d]+)(?=/)%',($pageNumber+1),$currentURL);