[RegEx PHP] Délimiteurs sur plusieurs lignes [Résolu]

Signaler
Messages postés
2120
Date d'inscription
jeudi 16 septembre 2004
Statut
Membre
Dernière intervention
4 novembre 2019
-
Flachy Joe
Messages postés
2120
Date d'inscription
jeudi 16 septembre 2004
Statut
Membre
Dernière intervention
4 novembre 2019
-
Salut,
j'ai un petit souci, je souhaite convertir en PHP un fichier texte en html, mon fichier ressemble à ça :
une ligne
autre chose
+une liste
+de trucs
autre chose
+une autre liste
+avec d'autres trucs
+idem
et encore d'autre chose

et je voudrait obtenir ça
une ligne
autre chose

<li>une liste</li>
<li>de trucs</li>

autre chose

<li>une autre liste</li>
<li>avec d'autres trucs</li>
<li>idem</li>

et encore d'autre chose

Pour les <li> je n'ai pas de problème
$texte_html = preg_replace('^[+](.*)^', '<li>$1</li>', $texte_html);
. C'est pour mettre les , je ne sais pas comment trouver la fin de la liste.

Merci de vos éclaircissements !

Flachy Joe
« Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes. » Les Shadoks

8 réponses

Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
60
ta regexp se simplifie :

^\+(.*)

quant a l'ensemble ul, tu peux faire :

^(?:\+[\s\S]+?\r\n(?!=\+))+




Renfield - Admin CodeS-SourceS - MVP Visual Basic
Messages postés
2120
Date d'inscription
jeudi 16 septembre 2004
Statut
Membre
Dernière intervention
4 novembre 2019
1
Ça marche nickel, merci.
J'ai juste eu à rajouter les ^ à la fin de chacune des regexp.

A+
Flachy Joe
« Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes. » Les Shadoks
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
60
en gros:
on cumule les caractères tant que la prochaine ligne commence par un +


Renfield - Admin CodeS-SourceS - MVP Visual Basic
Messages postés
2120
Date d'inscription
jeudi 16 septembre 2004
Statut
Membre
Dernière intervention
4 novembre 2019
1
J'ai trouvé plus compréhensible, et plus restrictif :

$texte_html = preg_replace('/([\r\n]\s*\+.*)+/', '$0'."\r\n".'', $texte_html);
$texte_html = preg_replace('/[\r\n]\s*\+(.*)/', '<li>$1</li>'."\r\n", $texte_html);



Flachy Joe
« Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes. » Les Shadoks
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
60
fonctionne pas chez moi...

Renfield - Admin CodeS-SourceS - MVP Visual Basic
Messages postés
2120
Date d'inscription
jeudi 16 septembre 2004
Statut
Membre
Dernière intervention
4 novembre 2019
1
Étranche ... (de cake)

Y a des différences selon les versions de PHP ?
Peut être qu'on peut remplacer les [\r\n] par des débuts de lignes ^ ?

Flachy Joe
« Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes. » Les Shadoks
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
60
j'utilises RegExp Workshop

mais en la lisant, je vois pas ce qui fait agréger les lignes...

je piges pas trop pourquoi ca fonctionne chez toi...


Renfield - Admin CodeS-SourceS - MVP Visual Basic
Messages postés
2120
Date d'inscription
jeudi 16 septembre 2004
Statut
Membre
Dernière intervention
4 novembre 2019
1
Le $0 correspond au texte qui satisfait le masque entier, au contraire du $1 qui correspond aux parenthèses pour <li>
On trouve donc les répétitions de un saut de ligne suivi éventuellement d'espaces puis de + et de n'importe quoi.

Ce qui ne me semblait pas évident c'est comment ça trouve la fin de la liste, le dernier "n'importe quoi" devrait contenir la suite du texte.
Mais j'ai trouvé :
[b]arkani at iol dot pt
sur http://fr.php.net/manual/fr/function.preg-replace.php/b
'.' Match any character (except newline)



Avec KRegExpEditor ça ne fonctionne qu'avec le début de ligne à la place de [\r\n].

Flachy Joe
« Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes. » Les Shadoks