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

Messages postés
2120
Date d'inscription
jeudi 16 septembre 2004
Statut
Membre
Dernière intervention
4 novembre 2019
- - Dernière réponse : Flachy Joe
Messages postés
2120
Date d'inscription
jeudi 16 septembre 2004
Statut
Membre
Dernière intervention
4 novembre 2019
- 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
Afficher la suite 

8 réponses

Meilleure réponse
Messages postés
17280
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
21 juillet 2019
58
3
Merci
ta regexp se simplifie :

^\+(.*)

quant a l'ensemble ul, tu peux faire :

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




Renfield - Admin CodeS-SourceS - MVP Visual Basic

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 200 internautes nous ont dit merci ce mois-ci

Commenter la réponse de Renfield
Messages postés
2120
Date d'inscription
jeudi 16 septembre 2004
Statut
Membre
Dernière intervention
4 novembre 2019
1
0
Merci
Ç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
Commenter la réponse de Flachy Joe
Messages postés
17280
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
21 juillet 2019
58
0
Merci
en gros:
on cumule les caractères tant que la prochaine ligne commence par un +


Renfield - Admin CodeS-SourceS - MVP Visual Basic
Commenter la réponse de Renfield
Messages postés
2120
Date d'inscription
jeudi 16 septembre 2004
Statut
Membre
Dernière intervention
4 novembre 2019
1
0
Merci
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
Commenter la réponse de Flachy Joe
Messages postés
17280
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
21 juillet 2019
58
0
Merci
fonctionne pas chez moi...

Renfield - Admin CodeS-SourceS - MVP Visual Basic
Commenter la réponse de Renfield
Messages postés
2120
Date d'inscription
jeudi 16 septembre 2004
Statut
Membre
Dernière intervention
4 novembre 2019
1
0
Merci
É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
Commenter la réponse de Flachy Joe
Messages postés
17280
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
21 juillet 2019
58
0
Merci
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
Commenter la réponse de Renfield
Messages postés
2120
Date d'inscription
jeudi 16 septembre 2004
Statut
Membre
Dernière intervention
4 novembre 2019
1
0
Merci
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
Commenter la réponse de Flachy Joe