Je sais comment utiliser preg_match et preg_match_all pour trouver les correspondances réelles des modèles d'expression régulière dans une chaîne donnée, mais la fonction que j'écris a non seulement besoin du texte des correspondances, mais pour pouvoir parcourir la chaîne AUTOUR des correspondances .. .
Par conséquent, j'ai besoin de connaître la position de la correspondance dans la chaîne, en fonction d'un modèle d'expression régulière.
Je n'arrive pas à trouver une fonction similaire à strpos () qui permet l'expression régulière ... des idées?
Vous pouvez utiliser le drapeau PREG_OFFSET_CAPTURE
pour cela:
preg_match('/(bar)/', 'Foobar', $matches, PREG_OFFSET_CAPTURE);
var_export($matches);
Le résultat est:
array (
0 =>
array (
0 => 'bar',
1 => 3, // <-- the string offset of the match
),
1 =>
array (
0 => 'bar',
1 => 3,
),
)
preg_match a un indicateur facultatif, PREG_OFFSET_CAPTURE
, qui enregistre la position de chaîne de l'occurrence de la correspondance dans la "botte de foin" d'origine. Voir la section 'flags': http://php.net/preg_match
Avec l'utilisation de PREG_OFFSET_CAPTURE sur preg_match (), vous obtiendrez le nombre de fois sur les correspondances sur le modèle. Lorsqu'il y a correspondance, la valeur de décalage commence à 0.
En utilisant cette valeur, vous pouvez à nouveau appeler preg_match en utilisant le paramètre offset.