REGEX - Alles bis auf bestimmtes Zeichen in Variable schreiben

Hallo,

ich habe folgende Ausdrücke:

'/\[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:

[ul] [li]Punkt 1[/*] [/li][li]Punkt 2[/*] [/li][/ul]

mit preg_replace bearbeite funktioniert alles perfekt:

[code]

  • Punkt 1
  • Punkt 2
[/code]

Dieser Code wird aber danach noch durch nl2br() gejagt. Dadurch erhalte ich dann folgenden falschen Code:

[code]


  • Punkt 1

  • Punkt 2


[/code]

Vielleicht kennt ihr auch ein Workaround. Bin für jede Hilfe Dankbar.

$string = preg_replace(‚/</li>\s+

  • /is‘,‚
  • ‘,$string);
    $string = preg_replace(‚/</li>\s+</ul>/si‘,‚
  • ‘,$string);

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

    Suchen

    '/\[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

    '<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