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:
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.
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îneFinLe 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 #558320.



.
Ceci devrait fonctionner :
Explications :
-> .+\n? = A = au moins un caractère quelconque suivi de zéro ou 1 retour chariot ;
-> (A)+ = B = au moins une fois A ;
-> /^chaîneDébut(B)chaîneFin$/ = une chaîne de caractères commençant par chaîneDébut, finissant par chaîneFin avec B au milieu.
Exemple avec "chaîneDébutCeci\nest\nla\nchaîne\nquelconquechaîneFin" :
-> A1 = "Ceci\n"
-> A2 = "est\n"
-> A3 = "la\n"
-> A4 = "quelconque"
-> B = A1+A2+A3+A4 = "Ceci\nest\nla\nchaîne\nquelconque"