Aller au contenu

REGEXP multi-lignes en PHP


adn

Sujets conseillés

Hello,

Je coince ce matin sur la formulation d'une REGEXP pour remplacer une balise par une autre en prenant en compte le multi-ligne. J'ai bien vu qu'il y a avait une option PCRE_DOTALL pour dire que le point passe outre les retours chariot mais je ne sais pas comment l'intégrer dans l'expression.

Voici le code :

// replace
$fichnew = preg_replace("#<div id=\"tutu\">(.*)<\/div>#", "<h3>$1</h3>", $fich);

// ecriture du fichier modifié
if (strcmp($fichnew, $fich) != 0)
{
     ....

Si vous avez mieux en terme d'expression, n'hésitez pas Merci :)

Allez tant que j'y suis... comment ne pas être dépendant du nombre de blancs entre la balise DIV et ID= ?

Modifié par adn
Lien vers le commentaire
Partager sur d’autres sites

Posté (modifié)

Merci TheRec,

J'ai essayé ta proposition mais c'est pas encore çà :

Il ne remplace plus que <div id="tutu"> par <h3> et pas le </div> par </h3>, curieux ??

Et il ne remplace que la première occurence de ce pattern. Je voudrais qu'ils les change toutes ....

Verrais-tu le souçi ?

Modifié par adn
Lien vers le commentaire
Partager sur d’autres sites

Posté (modifié)

Sur la base de ton exemple, j'ai tatonné et j'ai trouvé çà qui marche:

$fichnew = preg_replace("/<div[\s]*id=\"tutu\">(.*?)<\/div>/smi", "<h3>$1</h3>", $fich);

Le ? débloque le pb du multi-ligne et je ne sais pas pourquoi ??

Modifié par adn
Lien vers le commentaire
Partager sur d’autres sites

Effectivement ça marche... à noter que ce n'est pas le "m" mais le "s" qui semble causer le problème chez moi :S

Si quelqu'un peut nous dire pourquoi, qu'il n'hésite pas :D

Modifié par TheRec
Lien vers le commentaire
Partager sur d’autres sites

Merci ;)

Le mérite en revient aussi aux commentaires/commentateurs du manuel PHP qui m'ont déjà maintes et maintes fois appris grandement ;)

Merci pour ma première épingle :fete:

Lien vers le commentaire
Partager sur d’autres sites

  • 5 months later...
  • 7 years later...

Je sais que c'est un vieux topic mais pas grave.


Merci aux précédentes personnes qui se sont cassé les dents sur cette problématique je viens de passer 2h à chercher avant de trouver ma solution ici :)


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...