Faire un don ! | | style | statistiques | contactez-nous | plan | lettre d'information

Programmation.php : Regexp et retour à la ligne

Posté par Dinofly (page perso, ) le 09 avril 2005
Bonjour,



Je suis ultra-débutant en expressions régulières et j'aimerais faire quelque chose qui me semblait simplissime au premier abord: remplacer une chaîne quelconque qui se trouve entre deux autres chaînes bien définies.



En gros:

chaîneDebut.*chaîneFin



Le problème c'est que dans la chaîne quelconque, il y a des retours à la ligne. Et du coup rien n'est remplacé car le point représente tout sauf un retour à la ligne.



Là je me suis dit: "oh c'est rien, juste un petit \n à coller !".

Ben non :-/



Je n'ai absolument aucune idée de comment représenter ce curieux retour à la ligne qui n'est pas pris en compte par \n dans mon expression régulière.



D'après Google, il y a pas mal de monde qui a déjà rencontré ce problème. Mais je n'y ai trouvé aucune solution. Au moins je me sens moins seul :-)



Pour info la chaîne en question vient d'un simple fichier texte récupéré avec file().



Merci pour votre aide.

> Lire le message (3 commentaires, moyenne: 3).  

Vous avez demandé le commentaire #558722.

Merci

Posté par Dinofly (page perso, ) le 11/04/2005 à 09:02. (lien). Évalué à 1.

Merci à vous deux, ça marche !

C'est bien DOT_ALL (matérialisée par un "s") qu'il me manquait.

De plus, pour information si quelqu'un tombe sur ce message en cherchant sur Google, l'option PCRE_UNGREEDY matérialisée par un "U" permet d'éviter de remplacer trop de choses quand on a plusieurs occurences à remplacer d'un seul coup.

Exemple:

Test chaineDebut chaineQuelconque chaineFin Salut chaineDebut chaineQuelconque2 chaineFin Test2


On veut remplacer ce qu'il y a entre chaineDebut et chaineFin par une chaine vide.

avec l'expression suivante:
/chaineDebut.*chaineFin/s

Vous obtiendrez:
Test Test2


Tandis qu'avec celle-ci:
/chaineDebut.*chaineFin/sU

Vous aurez:
Test Salut Test2


Que ça serve à quelqu'un !

--
Je connais bien l'algèbre de Boole, et j'ai même vu tous ses flims.