• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

REGEX - Alles bis auf bestimmtes Zeichen in Variable schreiben

CGollhardt

Mitglied
Hallo,

ich habe folgende Ausdrücke:
Code:
'/\[list\](.*?)\[\/list\]/is'
'/\[list\=(1|a)\](.*?)\[\/list\]/is'
'/\[\*\](.*?)\[\/\*\]/is'

Arbeite ich jetzt mit preg_replace(), habe ich ja bei allen die Variable $1 und beim 2. zusätzlich $2.

Kann ich es irgendwie erreichen, dass ein Zeilenumbruch \n nicht in diesen Variablen gespeichert wird?

Hintergrund
Wie man Sieht ist dies um BBCode umzuwandeln. Wenn ich aber folgenden Code:
Code:
[LIST]
[*]Punkt 1[/*]
[*]Punkt 2[/*]
[/LIST]

mit preg_replace bearbeite funktioniert alles perfekt:
Code:
<ul>
<li>Punkt 1</li>
<li>Punkt 2</li>
</ul>

Dieser Code wird aber danach noch durch nl2br() gejagt. Dadurch erhalte ich dann folgenden falschen Code:
Code:
<ul><br />
<li>Punkt 1</li><br />
<li>Punkt 2</li><br />
</ul><br />

Vielleicht kennt ihr auch ein Workaround. Bin für jede Hilfe Dankbar.
 
$string = preg_replace('/<\/li>\s+<li>/is','</li><li>',$string);
$string = preg_replace('/<\/li>\s+<\/ul>/si','</li></ul>',$string);
 
$string = preg_replace('/<\/li>\s+<li>/is','</li><li>',$string);
$string = preg_replace('/<\/li>\s+<\/ul>/si','</li></ul>',$string);

Vielen Dank, dass hat mir sehr geholfen! Im Klartext sehen jetzt meine Regulären Ausdrücke so aus:


Suchen
Code:
'/\[list\](.*?)\[\/list\]/is',
'/\[list\=(1|a)\](.*?)\[\/list\]/is',
'/\[\*\](.*?)\[\/\*\]/is',
'/<\/li>\s+<li>/is',
'/<\/li>\s+<\/ul>/is',
'/<\/li>\s+<\/ol>/is',
'/<ul>\s+<li>/is',
'/<ol type\="(1|a)">\s+<li>/is'
Ersetzen
Code:
'<ul>$1</ul>',
'<ol type="$1">$2</ol>',
'<li>$1</li>',
'</li><li>',
'</li></ul>',
'</li></ol>',
'<ul><li>',
'<ol type="$1"><li>'

Funktioniert alles Wunderbar. Wenn es noch Verbesserungsvorschläge gibt, bin ich jederzeit offen
 
Zurück
Oben