Aller au contenu

Expression régulière particulière


captain_torche

Sujets conseillés

Bonjour à tous !

Je cherche à parser diverses urls dans un document, et éventuellement remplacer les esperluettes simples (&) par &.

Jusqu'ici, pas de souci, mais je n'arrive pas à ne pas capturer les &, ce qui fait que dans ce cas, je me retrouve avec des &, ce qui est fort désagréable.

Quelqu'un connaîtrait-il une astuce ?

Lien vers le commentaire
Partager sur d’autres sites

Bon, je me réponds tout seul ;)

Il faut utiliser les assertions négatives (Tutoriel trouvé sur http://www.lumadis.be/regex/tuto_pcre.php#look, à garder en favoris)

$test = '<a href="http://www.site.com?rubrique=1&article=15&test=test">Lien de test</a>';
$reg_amp = '#&(?!amp;)#';
$test = preg_replace($reg_amp, '&', $test);
echo $test;

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

En mettant le code que tu as déjà réalisé tu auras certainement une réponse qui collera plus à ce que tu attends ;)

Maintenant tu peux éventuellement convertir tous les & en simple & avant de commencer le remplacement des autres &... ce n'est peut-être pas la solution la plus optimisée, mais c'est une solution tout de même (du moins si j'ai bien compris ce que tu souhaites).

Sinon il faut peut être regarder du côté des "Assertions", tu as une explication complète sur la syntaxe dans le manuel PHP.

Bonne chance.

*EDIT* Ben grillé quoi ;)

Lien vers le commentaire
Partager sur d’autres sites

Le problème avec ces approches est qu'elles vont convertir é en é ... qui ne sera pas correctement interprété par les navigateurs.

Mais comme ce é n'est pas supposé se trouver dans une URL, ce sera bon... mais uniquement pour les URLs. ;)

Lien vers le commentaire
Partager sur d’autres sites

C'est justement le problème qu'on résoud avec les assertion dans l'expression régulière... l'assertion sert à vérifier que les caractères avant ou après (selon la syntaxe) correspondent au sous-masque avec lequel elle est liée ;) En l'occurence on vérifie que ce qui se trouve après "&" ne correspondent pas à "amp;".

Mais effectivement si il y a d'autre autres entités HTML qui se trouvent dans le document, elles verront leur "&" remplacée par "&amp"... et c'est selon le premier message de captain_torche ce dont il avait besoin.

S'il faut prendre en compte toutes les entités ça va devenir plus difficile ;)

Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...