php - preg_replace 仅匹配的一部分

标签 php regex preg-match

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

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

效果很好,但是我想知道是否有更好的方法而无需在替换参数中包含 '/'。我需要匹配两个 / 之间的数字,因为 URL 有时可以包含页面部分以外的数字。然而,这些数字绝不仅仅是数字,所以 /[\d]+/ 阻止它们被替换。

最佳答案

你可以使用 look-around assertions :

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

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

  • (?<=/) – 如果有 /在当前位置的后面
  • ([\d]+) – 匹配一位或多位数字
  • (?=/) – 但前提是存在 /之后

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

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

关于php - preg_replace 仅匹配的一部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2682177/

相关文章:

php - 包含/要求 PHP 不工作

php - 如何对 Symfony2 Controller 进行单元测试?

python正则表达式提取用户名:password or email:password in mixed delimited csv

php - "first 2 words"数组中值的多重匹配然后array_intersect?

php - preg_match中的 `e`修饰符是什么意思?

php - Laravel 如何删除旧的日志文件

javascript - 尝试制作一个按钮,仅显示设置了值或变量的项目

Java 正则表达式匹配每 2 个字母之间带有可选多个注释的单词(如何反向引用正则表达式子表达式)

Javascript: 'Issue?' 在文本框中以千位数字更新用户输入

php - 当想要检测多个 url 时 preg_match 不起作用