Karşılaşmanın preg_replace sadece bir parçası

2 Cevap php

I'm using preg_replace to create urls for modrewrite based paging links. I use:

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

değiştirme parametresi '/' eklemek zorunda kalmadan daha iyi bir yolu olup olmadığını ancak ben merak ediyorum, hangi inşaat para cezası. Ben URL'ler bazen sayfa bölümü dışındaki sayılar içerebilir iki / arasındaki olarak numarayı maç gerekir. Bu rakamlar ancak sadece sayılar asla, bu yüzden /[\d]+/ yerini almak onları durdurur var.

2 Cevap

Sen kullanabilirsiniz look-around assertions:

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

(?<=…) pozitif bir görünüm arkasında iddiasıdır ve (?=…) pozitif bir görünüm önde iddia. Düzenli ifade (?<=/)([\d]+)(?=/) aşağıdaki gibi yorumlanmalıdır:

  • (?<=/) - a / geçerli konumunda arkasında olup olmadığını
  • ([\d]+) - Bir veya daha fazla basamak maç
  • A / sonra olduğunu, ancak sadece - (?=/)

Ayrıca aşağıdaki gibi ifadenizi kolaylaştırabilirsiniz:

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

Denemek

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