2010-04-21 3 views
3

J'utilise preg_replace pour créer des URL pour les liens de pagination modrewrite. J'utilise:preg_replace seule partie du match

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

qui fonctionne très bien, mais je me demandais s'il y a une meilleure façon sans avoir à inclure le '/' dans le paramètre de remplacement. J'ai besoin de faire correspondre le nombre comme étant entre deux / car les URL peuvent parfois contenir des nombres autres que la partie de la page. Ces nombres ne sont jamais seulement des nombres, donc /[\d]+/ les empêche de se faire remplacer.

Répondre

8

Vous pouvez utiliser look-around assertions:

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

(?<=…) est une affirmation regarder en arrière positif et (?=…) une affirmation positif d'anticipation. L'expression régulière (?<=/)([\d]+)(?=/) doit être interprété comme suit:

  • (?<=/) - s'il y a un / derrière la position actuelle
  • ([\d]+) - correspondre à un ou plusieurs chiffres
  • (?=/) - mais seulement en cas de / après

Vous pouvez également simplifier l'expression comme suit: 01

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

+1 L'expression peut être simplifiée plus juste '% (? <= /) \ D + (? = /)%', Pas besoin de mettre tous les crochets autour '\ d'. –

+0

Merci, je savais qu'il y avait quelque chose comme ça, mais je ne pouvais pas me rappeler comment ils étaient appelés ou comment ils fonctionnaient. – ianbarker

+0

+1, tu m'as battu. – YOU

2

Essayez

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