Mailinglisten-Archive |
Hi,
On Sat, Oct 29, 2005 at 08:27:43PM +0200, Peter Linzenkirchner wrote:
>
> ich habe folgenden String:
>
> beliebiger Text
> [Liste]
> zeile1
> zeile2
> zeile3
> [/Liste]
> beliebiger Text
>
> Mein Ziel wäre, [Liste] durch <ul>, [/Liste] durch </ul>, die erste
> Zeilenschaltung durch <li>, die letzte durch </li> und alle
> dazwischen durch </li></li> zu ersetzen. Daran scheitere ich aber.
Du willst also nach den Ersetzungen folgenden String haben:
beliebiger Text
<ul>
<li>zeile1</li>
<li>zeile2</li>
<li>zeile3</li>
</ul>
beliebiger Text
Korrekt?
Das kannst du mit preg_replace_callback() machen, in dem du der
Callback-Funktion die Zeilen der Items uebergibst und dann in der
Funktion mit preg_replace() die <li> Tags einfuegst.
<?php
$text = <<<EOT
beliebiger Text
[Liste]
zeile1
zeile2
zeile3
[/Liste]
beliebiger Text
EOT;
// Bekommt in $treffer[1] den Teil des Textes mit den Item-Zeilen
function list_callback($treffer) {
// Jetzt in dem Teil der Item-Zeilen die <li> Tags pro Zeile
// einfuegen
$items = preg_replace('#^(.*)$#m', '<li>\\1</li>', $treffer[1]);
// Noch die <ul> Tags drumrum und gut ist.
return "<ul>\n" . $items . "\n</ul>";
}
// Pattern um die Item-Zeilen zu finden
$pattern = '#\[Liste\]\n(.*)\n\[\/Liste\]#isU';
$text_new = preg_replace_callback($pattern, 'list_callback', $text);
echo $text_new;
?>
Gruss Jens
php::bar PHP Wiki - Listenarchive