[preg_replace] Zeilenumbrüche im Suchstring

t-bird

Grünschnabel
Regulärer Ausdruck für Listen (wiki-style)

Hallo zusammen,

ich habe folgenden String namens $dbcontent

Code:
~1. Rohmaterial~
xxx werden gefertigt aus:
* zinnstabilisiertem, weichmacherfreien hochschlagzäh ...
* extrem schlagzähem, witterungsbeständigem ...

~2. Isolierverhalten~
U-Werte nach ...

Als erstes verwende ich nl2br um Zeilenumbrüche in schöne <br /> umzuwandeln.

Code:
$dbcontent = nl2br($dbcontent);

Danach möchte ich aus den Sternchen "*" eine Auflistung zaubern. Ich hatte folgende Idee:

Code:
  $suchmuster[3] = '/\*(.*?)\<br \/\>/i';
  $ersetzungen[3] = '<ul><li>$1</li></ul>';

  $dummy = preg_replace($suchmuster, $ersetzungen, $dbcontent);
  $dbcontent = $dummy;

Soweit ist alles ok. Aus dem Text bastelt er mir folgendes:

Code:
xxx werden gefertigt aus:<br />
<ul><li>zinnstabilisiertem, weichmacherfreien hochschlagzäh ... </li></ul>
<ul><li>extrem schlagzähem, witterungsbeständigem ... </li></ul>
<br />
2. Isolierverhalten<br />
U-Werte nach ...<br />

Der zweite Schritt wäre die überflüssigen </ul> </ul> Tags zwischen den beiden Einträgen zu entfernen. Ich hatte mir folgendes gedacht:

Code:
  $suchmuster[4] = '/\<\/ul\>\x13|\x10\<ul\>/';
  $ersetzungen[4] = '';

Irgendwie klappt es nicht. Ich habe \x13|\x10 schon durch \n und \r, dann noch einen "." ausprobiert und auch mal nichts dazwischen geschrieben. Das Suchmuster wird einfach nicht erkannt?!

Das Problem - zwischen </ul> und </ul> befindet sich noch ein Zeilenumbruch.

Kann mir jemand auf anhieb die Lösung verraten? Ich bin für heute erst mal mit meinem Latein am Ende.

Gruß
t
 
Zuletzt bearbeitet:
So ich habe den Fehler gefunden. Ich wusste nicht das nl2br einfach vor einem \n nur ein <br /> einfügt.
Bisher dachte ich das \n wird durch ein <br /> ersetzt.

Also liegt der Fehler schon im ersten Suchmuster und es sollte so aussehen:

Code:
$suchmuster[3] = '/\*(.*?)<br \/>(\n|\r)/i';
$ersetzungen[3] = '<ul><li>$1</li></ul>';

Das 2. Suchmuster muss dann so heissen:

Code:
$suchmuster[4] = '/<\/ul>(\n|\r)<ul>/';
$ersetzungen[4] = '$1';

Somit haben wir einen einfachen Listen-Parser im wiki-Style. ;)
 
Zurück