marco: nochmal ein problem, diesmal mit preg_replace()

Hallo zusammen,

Schon wieder habe ich ein Problem, diesmal aber mit der Funktion preg_replace().

Immer noch bin ich mit meinem Forum beschäftigt. Ich möchte den String [b]text[/b] mit <b>text</b> ersetzen. Dazu habe ich folgende Funktion benutzt:
$inhalt = preg_replace("![b](.*?)[/b]!","<b>\2</b>",$inhalt);

Nun gibt es aber ein Problem wenn der Text zwischen [b] und [/b] über mehrere Zeilen geht. Dazu habe ich in der Doku nachgeschaut und bin auf folgenden Lösungsansatz gekommen:
$inhalt = preg_replace("![b](.*?)[/b]!m","<b>\2</b>",$inhalt);

Leider funktioniert dies nicht wie gewünscht. Sobald der Text zwischen den Tags über mehrere Zeilen geht, wird nichts mehr ersetzt.

Vielen Dank für eure Hilfe schon im Voraus.

Grüsse
Marco

  1. Hallo marco,

    Nun gibt es aber ein Problem wenn der Text zwischen [b] und [/b] über mehrere Zeilen geht. Dazu habe ich in der Doku nachgeschaut und bin auf folgenden Lösungsansatz gekommen:
    $inhalt = preg_replace("![b](.*?)[/b]!m","<b>\2</b>",$inhalt);

    Falscher Modifier. (ist mir aber gestern Abend auch passiert ;)) Nimm statt s statt m: "![b](.*?)[/b]!s"

    Viele Grüße,
    Christian

    1. Falscher Modifier. (ist mir aber gestern Abend auch passiert ;)) Nimm statt s statt m: "![b](.*?)[/b]!s"

      Oh, vielen Dank. Jetzt funktionierts.

      Gruss Marco

  2. Warum machst du es dir so schwer? Mach doch zwei Ersetzungen:

    $inhalt = preg_replace("![b]!","<b>",$inhalt);
    $inhalt = preg_replace("![/b]!","</b>",$inhalt);

    1. Hallo Nemo,

      Mach doch zwei Ersetzungen:

      $inhalt = preg_replace("![b]!","<b>",$inhalt);
      $inhalt = preg_replace("![/b]!","</b>",$inhalt);

      In diesem Fall wäre str_replace mit Array-Parametern wohl besser geeignet. Außerdem: Was ist, wenn zuoft [b] oder [/b] auftaucht?

      Viele Grüße,
      Christian