phpbar.de logo

Mailinglisten-Archive

[php] Problem mit regulärem Ausdruck

[php] Problem mit regulärem Ausdruck

Jens Giessmann jg at handcode.de
Son Okt 30 13:39:03 CET 2005


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