Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

preg_replace avec n (.*?)

0 views
Skip to first unread message

samuel

unread,
Jul 1, 2009, 7:04:28 AM7/1/09
to
bonjour!
j'aimerais transformer

[list]
[*]bla1
[*]bla2
[*]bla3
[*]bla4
[/list]

en
<ul><li>bla1</li>
<li>bla2</li>
<li>bla3</li>
<li>bla4</li></ul>
mais avec X bla, je sais pas comment faire....
jai commenc� � �crire �a:

'/\[list\] ([*](.*?))+ \[\/list\]/is'

peut �tre que cest pas possible, et quil faut remplacer [list][*]bla1
et [*]blax[*] et [*]dernierbla[/list] s�par�ment, ou un truc comme
�a...
merci beaucoup!

Olivier Miakinen

unread,
Jul 1, 2009, 11:31:47 AM7/1/09
to
Bonjour,

Le 01/07/2009 13:04, samuel a �crit :


>
> j'aimerais transformer
>
> [list]
> [*]bla1
> [*]bla2
> [*]bla3
> [*]bla4
> [/list]
>
> en
> <ul><li>bla1</li>
> <li>bla2</li>
> <li>bla3</li>
> <li>bla4</li></ul>
> mais avec X bla, je sais pas comment faire....

Pour ce genre de choses, l'id�al serait d'�crire d'abord un � parser �
qui lit le format d'origine et le stocke sous la forme d'un arbre, puis
il n'y a rien de plus simple que de g�n�rer le format de destination �
partir du format structur� interne. Mais bien s�r �a ne se fait pas �
coups de preg_replace().

> jai commenc� � �crire �a:
>
> '/\[list\] ([*](.*?))+ \[\/list\]/is'

Bon, mettons qu'on en reste aux preg_replace(). Il y a quand m�me deux
probl�mes.

Le premier est syntaxique :
/\[list]\s*(\[\*](.*?))+\s*\[\/list]/

Le second est que tu ne peux pas remplacer � la fois les [list] en <ul>
et les [*] en <li>, il faut le faire en plusieurs �tapes.


Voici une proposition.

1) [*]bla1 -> <li>bla1</li>

$str = preg_replace('/\[\*]([^[]*?)\s*\[/', "<li>$1</li>\n\t[", $str);

2) [list] <li>...</li> [/list] -> <ul><li>...</li></ul>

$str = preg_replace('|\[list]\s*(.*?)\s*\[/list]|i', '<ul>$1</ul>',
$str);

Attention, je n'ai rien test�, alors c'est sans garantie, d'autant que
j'ai essay� de respecter ton utilisation des blancs et des sauts de
ligne (ce qui complique).

Je fais suivre vers fr.comp.lang.regexp pour d'�ventuels compl�ments.

--
Olivier Miakinen

0 new messages