preg_replace only part of match
I'm using preg_replace
to create urls for modrewrite based paging links.
I use:
$nextURL = preg_replace('%/([\d]+)/%','/'.($pageNumber+1).'/',$currentURL);
which works fine, however I was wondering if there is a better way without having to include the '/'
in the replacement parameter. I need to match the number as being between two /
as the URLs can sometimes contain numbers other than the page part. These numbers are never only numbers however, so have /[\d]+/
stops them开发者_如何学C from getting replaced.
You could use look-around assertions:
%(?<=/)([\d]+)(?=/)%
(?<=…)
is a positive look-behind assertion and (?=…)
a positive look-ahead assertion. The regular expression (?<=/)([\d]+)(?=/)
is to be interpreted as follows:
(?<=/)
– if there is a/
in behind the current position([\d]+)
– match one or more digits(?=/)
– but only if there is a/
after that
You can also simplify your expression as follows:
preg_replace('%(?<=/)\d+(?=/)%', $pageNumber+1, $currentURL)
Try
$nextURL = preg_replace('%(?<=/)([\d]+)(?=/)%',($pageNumber+1),$currentURL);
精彩评论