Rimozione prima preg_replace newline
-
13-09-2019 - |
Domanda
Sto scrivendo un po 'di PHP per convertire BBcode in HTML.
Vorrei convertire questo BBcode:
[quote]
Hello World
[/quote]
per il seguente:
<blockquote>Hello World</blockquote>
La funzione preg_replace che sto usando per eseguire questa è:
preg_replace("/\[quote\](.+?)\[\/quote\]/s", "<blockquote>\\1</blockquote>", $bbCode);
Questo fa quasi tutto ho bisogno di, ma il mio problema è che essa porta attraverso la \ n del prima e dopo 'Ciao Mondo', e produce:
<blockquote>
Hello World
</blockquote>
Tutte le idee come potrei risolvere questo problema? Tutto l'aiuto molto apprezzato.
Soluzione
Prova questa espressione regolare:
/\[quote\]\s*(.+?)\s*\[\/quote\]/s
Altri suggerimenti
Hai bisogno di fuggire backslash all'interno di virgolette. Invece di "\ [", è necessario "\\ [".
Una possibilità sarebbe quella di utilizzare il 'e
' regex modificatore , chiamare, per esempio, la funzione trim
sulla stringa.
Citando la pagina del manuale:
e (
PREG_REPLACE_EVAL
)
Se questo modificatore è impostato,preg_replace()
fa normale sostituzione backreference in sostituzione stringa, valuta come codice PHP, e usa il risultato per la sostituzione stringa di ricerca. virgolette singole, doppie citazioni, backslash (\
) eNULL
caratteri saranno sfuggiti da backslash in backreference sostituiti.Solo
preg_replace()
utilizza questa modificatore; viene ignorato da altri PCRE funzioni.
Per esempio, questo codice, solo leggermente diversa dalla tua:
$bbCode = <<<STR
[quote]
Hello World
[/quote]
STR;
$output = preg_replace("/\[quote\](.+?)\[\/quote\]/es", "'<blockquote>' . trim('\\1') . '</blockquote>'", $bbCode);
var_dump($output);
darebbe:
string '<blockquote>Hello World</blockquote>' (length=36)
vale a dire, la funzione trim
viene chiamato su ciò che è stato abbinato - notare che rimuoverà tutti i bianchi-spazi all'inizio e alla fine della stringa; non solo a capo, ma anche spazi e tabulazioni.
(Per esempio, si può dare un'occhiata a Esempio # 4 sul pagina di manuale di preg_replace
)
(E 'forse un po' eccessivo, in questo caso, dovrei aggiungere - ma è bello sapere che in ogni caso)