preg_replace只是匹配的一部分

时间:2010-04-21 10:44:51

标签: php regex preg-match

我正在使用preg_replace为基于modrewrite的分页链接创建网址。 我用:

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

工作正常,但是我想知道是否有更好的方法而不必在替换参数中包含'/'。我需要将数字与两个/之间的数字相匹配,因为网址有时可能包含页面部分以外的数字。这些数字不仅仅是数字,所以/[\d]+/会阻止它们被替换。

2 个答案:

答案 0 :(得分:8)

您可以使用look-around assertions

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

(?<=…)是一个积极的后瞻性断言,(?=…)是一个积极的前瞻性断言。正则表达式(?<=/)([\d]+)(?=/)应解释如下:

  • (?<=/) - 如果当前位置后面有/
  • ([\d]+) - 匹配一个或多个数字
  • (?=/) - 但仅限于此后<{1}}

您还可以按如下方式简化表达式:

/

答案 1 :(得分:2)

尝试

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