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

Flachy Joe 2115 Messages postés jeudi 16 septembre 2004Date d'inscription 23 novembre 2017 Dernière intervention - 16 sept. 2009 à 20:12 - Dernière réponse : Flachy Joe 2115 Messages postés jeudi 16 septembre 2004Date d'inscription 23 novembre 2017 Dernière intervention
- 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

Répondre au sujet
Renfield 17307 Messages postés mercredi 2 janvier 2002Date d'inscription 18 janvier 2017 Dernière intervention - 16 sept. 2009 à 22:00
+3
Utile
ta regexp se simplifie :

^\+(.*)

quant a l'ensemble ul, tu peux faire :

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




Renfield - Admin CodeS-SourceS - MVP Visual Basic
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de Renfield
Flachy Joe 2115 Messages postés jeudi 16 septembre 2004Date d'inscription 23 novembre 2017 Dernière intervention - 21 sept. 2009 à 19:43
0
Utile
Ç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
Renfield 17307 Messages postés mercredi 2 janvier 2002Date d'inscription 18 janvier 2017 Dernière intervention - 21 sept. 2009 à 21:32
0
Utile
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
Flachy Joe 2115 Messages postés jeudi 16 septembre 2004Date d'inscription 23 novembre 2017 Dernière intervention - 25 sept. 2009 à 16:24
0
Utile
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
Renfield 17307 Messages postés mercredi 2 janvier 2002Date d'inscription 18 janvier 2017 Dernière intervention - 25 sept. 2009 à 16:32
0
Utile
fonctionne pas chez moi...

Renfield - Admin CodeS-SourceS - MVP Visual Basic
Commenter la réponse de Renfield
Flachy Joe 2115 Messages postés jeudi 16 septembre 2004Date d'inscription 23 novembre 2017 Dernière intervention - 25 sept. 2009 à 16:50
0
Utile
É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
Renfield 17307 Messages postés mercredi 2 janvier 2002Date d'inscription 18 janvier 2017 Dernière intervention - 25 sept. 2009 à 16:56
0
Utile
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
Flachy Joe 2115 Messages postés jeudi 16 septembre 2004Date d'inscription 23 novembre 2017 Dernière intervention - 25 sept. 2009 à 19:31
0
Utile
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

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.