preg_replace только часть матча - PullRequest
3 голосов
/ 21 апреля 2010

Я использую preg_replace для создания URL для пейджинговых ссылок на основе modrewrite. Я использую:

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

, который работает нормально, однако мне было интересно, есть ли лучший способ без необходимости включать '/' в параметр замены. Мне нужно, чтобы число совпадало с двумя /, поскольку URL-адреса могут иногда содержать номера, отличные от части страницы. Однако эти числа никогда не являются только числами, поэтому /[\d]+/ не дает им возможности заменить.

Ответы [ 2 ]

8 голосов
/ 21 апреля 2010

Вы можете использовать проверочные утверждения :

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

(?<=…) - это положительное предварительное утверждение и (?=…) - положительное предварительное утверждение. Регулярное выражение (?<=/)([\d]+)(?=/) должно интерпретироваться следующим образом:

  • (?<=/) - если за текущей позицией стоит /
  • ([\d]+) - соответствует одной или нескольким цифрам
  • (?=/) - но только если после этого есть /

Вы также можете упростить свое выражение следующим образом:

preg_replace('%(?<=/)\d+(?=/)%', $pageNumber+1, $currentURL)
2 голосов
/ 21 апреля 2010

Попробуйте

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