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

Signaler
Messages postés
2082
Date d'inscription
jeudi 16 septembre 2004
Statut
Membre
Dernière intervention
7 septembre 2020
-
Messages postés
2082
Date d'inscription
jeudi 16 septembre 2004
Statut
Membre
Dernière intervention
7 septembre 2020
-
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
A voir également:

8 réponses

Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
66
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
2082
Date d'inscription
jeudi 16 septembre 2004
Statut
Membre
Dernière intervention
7 septembre 2020
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
66
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
2082
Date d'inscription
jeudi 16 septembre 2004
Statut
Membre
Dernière intervention
7 septembre 2020
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
66
fonctionne pas chez moi...

Renfield - Admin CodeS-SourceS - MVP Visual Basic
Messages postés
2082
Date d'inscription
jeudi 16 septembre 2004
Statut
Membre
Dernière intervention
7 septembre 2020
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
66
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
2082
Date d'inscription
jeudi 16 septembre 2004
Statut
Membre
Dernière intervention
7 septembre 2020
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