[RegEx PHP] Délimiteurs sur plusieurs lignes

Résolu
Flachy Joe Messages postés 2103 Date d'inscription jeudi 16 septembre 2004 Statut Membre Dernière intervention 21 novembre 2023 - 16 sept. 2009 à 20:12
Flachy Joe Messages postés 2103 Date d'inscription jeudi 16 septembre 2004 Statut Membre Dernière intervention 21 novembre 2023 - 25 sept. 2009 à 19:31
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

Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
16 sept. 2009 à 22:00
ta regexp se simplifie :

^\+(.*)

quant a l'ensemble ul, tu peux faire :

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




Renfield - Admin CodeS-SourceS - MVP Visual Basic
Flachy Joe Messages postés 2103 Date d'inscription jeudi 16 septembre 2004 Statut Membre Dernière intervention 21 novembre 2023 1
21 sept. 2009 à 19:43
Ç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
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
21 sept. 2009 à 21:32
en gros:
on cumule les caractères tant que la prochaine ligne commence par un +


Renfield - Admin CodeS-SourceS - MVP Visual Basic
Flachy Joe Messages postés 2103 Date d'inscription jeudi 16 septembre 2004 Statut Membre Dernière intervention 21 novembre 2023 1
25 sept. 2009 à 16:24
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
25 sept. 2009 à 16:32
fonctionne pas chez moi...

Renfield - Admin CodeS-SourceS - MVP Visual Basic
Flachy Joe Messages postés 2103 Date d'inscription jeudi 16 septembre 2004 Statut Membre Dernière intervention 21 novembre 2023 1
25 sept. 2009 à 16:50
É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
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
25 sept. 2009 à 16:56
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
Flachy Joe Messages postés 2103 Date d'inscription jeudi 16 septembre 2004 Statut Membre Dernière intervention 21 novembre 2023 1
25 sept. 2009 à 19:31
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
Rejoignez-nous