2010-12-10 7 views
1

J'essaie de faire un preg_replace correspondant aux données entre les balises html.preg_replace les données entre les balises html

Ce modèle fonctionne très bien, mais je ne sais pas comment obtenir la chaîne de correspondance.

preg_replace("/(?<=>)[^><]+?(?=<)/", "$1",$string); 

ne pas savoir beaucoup sur regex, je suppose que 1 $ ramènerait le match, mais il ne fonctionne pas. maintenant ce schéma (ci-dessus) permet de supprimer toutes les données entre les balises html si je

preg_replace("/(?<=>)[^><]+?(?=<)/", "",$string); 

mon objectif principal est d'avoir une ligne où je peux mettre le match retour à travers une fonction comme

preg_replace("/(?<=>)[^><]+?(?=<)/", string_function("$1"),$string); 

Répondre

0

ne sachant pas grand-chose de regex, je suppose que $ 1 retournerait le match, mais ce n'est pas le cas.

Utilisez "$0". Vous ne capturez aucun groupe, donc le groupe 1 n'existe pas (ce qui signifie que $1 ne fera référence à rien). Voir la description du paramètre replacement dans le preg_replace() docs pour en savoir plus sur $0 et ses amis.

mon objectif principal est d'avoir une ligne où je peux mettre le match retour à travers une fonction comme

Pour exécuter une fonction sur la chaîne trouvée (s), vous devez utiliser preg_replace_callback() à la place.

1

Vous devez utiliser preg_replace_callback pour appliquer une fonction personnalisée.

Aussi preg_replace ne retournera rien Je pense que vous avez besoin de preg_match.

0

Utilisez plutôt preg_match(). La signature de la méthode est la suivante:

int preg_match (string $pattern , string $subject [, array &$matches [, int $flags = 0 [, int $offset = 0 ]]])

Si vous passez dans le paramètre matches, alors il va se remplir avec les matchs résultants.

.: par exemple

preg_match("/(?<=>)[^><]+?(?=<)/", $string, $matches); 
print_r($matches); 

$matches doit contenir le résultat que vous voulez.

Questions connexes