Entfernen ersten Newline preg_replace
-
13-09-2019 - |
Frage
Ich schreibe einige PHP BBcode zu HTML konvertieren.
Ich möchte diese BBcode konvertieren:
[quote]
Hello World
[/quote]
auf die folgenden:
<blockquote>Hello World</blockquote>
Die preg_replace-Funktion, die ich verwende diese auszuführen ist:
preg_replace("/\[quote\](.+?)\[\/quote\]/s", "<blockquote>\\1</blockquote>", $bbCode);
Dieser fast tut alles was ich brauche es, aber mein Problem ist, dass es trägt durch die \ n die aus der Zeit vor und nach dem Wort ‚Hallo Welt‘, und produziert:
<blockquote>
Hello World
</blockquote>
Irgendwelche Ideen, wie ich dieses Problem beheben könnte? Jede Hilfe sehr geschätzt.
Lösung
Versuchen Sie, diesen regulären Ausdruck:
/\[quote\]\s*(.+?)\s*\[\/quote\]/s
Andere Tipps
Sie müssen Schrägstriche innerhalb von doppelten Anführungszeichen entkommen. Statt "\ [", müssen Sie "\\ [".
Eine Möglichkeit wäre die Verwendung der 'e
' regex-Modifikator , zu benennen, zum Beispiel der trim
Funktion auf der Saite.
Zitiert die Seite des Handbuchs:
e (
PREG_REPLACE_EVAL
)
Wenn dieser Modifikator gesetzt ist,preg_replace()
normale Ersetzung von Rückreferenzierungen im Ersatz string, wertet sie als PHP-Code und das Ergebnis verwendet zum Ersetzen der Suchbegriff. Apostrophe, Doppel Zitate, Schrägstriche (\
) undNULL
Zeichen werden durch Schrägstriche entwertet werden in der ersetzten Rück.Nur
preg_replace()
verwendet diese Modifikator; es wird von anderen PCRE ignoriert Funktionen.
Zum Beispiel dieser Code nur geringfügig von Ihnen:
$bbCode = <<<STR
[quote]
Hello World
[/quote]
STR;
$output = preg_replace("/\[quote\](.+?)\[\/quote\]/es", "'<blockquote>' . trim('\\1') . '</blockquote>'", $bbCode);
var_dump($output);
Würde geben Sie:
string '<blockquote>Hello World</blockquote>' (length=36)
dh die trim
Funktion aufgerufen wird, was abgestimmt wurde - beachten Sie, es werden alle weißen Räume entfernen am Anfang und Ende der Zeichenfolge; nicht nur neue Zeilen, sondern auch Räume und Tabulatoren.
(Zum Beispiel können Sie einen Blick auf Beispiel # 4 auf der nehmen -Seite der preg_replace
)
(Es ist vielleicht ein bisschen übertrieben in diesem Fall sollte ich hinzufügen - aber es ist schön zu wissen, sowieso)