2010-04-21 86 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);