preg_replace只是匹配的一部分

ian*_*ker 3 php regex preg-match

我正在使用preg_replace基于modrewrite的分页链接创建URL.我用:

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

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

Gum*_*mbo 8

你可以使用环顾四周的断言:

 %(?<=/)([\d]+)(?=/)%
Run Code Online (Sandbox Code Playgroud)

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

  • (?<=/)- 如果/当前位置后面有一个
  • ([\d]+) - 匹配一个或多个数字
  • (?=/)- 但只有在那/之后才有

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

preg_replace('%(?<=/)\d+(?=/)%', $pageNumber+1, $currentURL)
Run Code Online (Sandbox Code Playgroud)