Retrait premier saut de ligne preg_replace
-
13-09-2019 - |
Question
J'écris un peu de PHP pour convertir BBcode en HTML.
Je voudrais convertir ce BBcode:
[quote]
Hello World
[/quote]
à ce qui suit:
<blockquote>Hello World</blockquote>
La fonction preg_replace que j'utilise pour effectuer c'est:
preg_replace("/\[quote\](.+?)\[\/quote\]/s", "<blockquote>\\1</blockquote>", $bbCode);
Cela fait presque tout ce que je besoin, mais mon problème est qu'il porte à travers le \ n de avant et après « Bonjour tout le monde », et produit:
<blockquote>
Hello World
</blockquote>
Toutes les idées comment je pourrais résoudre ce problème? Toute aide très appréciée.
La solution
Essayer cette expression régulière:
/\[quote\]\s*(.+?)\s*\[\/quote\]/s
Autres conseils
Vous devez échapper à l'intérieur de la barre oblique inverse entre guillemets doubles. Au lieu de "\ [", vous avez besoin "\\ [".
Une possibilité serait d'utiliser le « e
» regex modificateur , d'appeler, par exemple, la fonction trim
sur la chaîne.
Citant cette page du manuel:
e (
PREG_REPLACE_EVAL
)
Si ce modificateur est défini,preg_replace()
fait la substitution normale des dans le remplacement des backreferences chaîne, il évalue code PHP, et utilise le résultat pour remplacer le chaîne de recherche. Les guillemets simples, doubles citations, barre oblique inverse (\
) etNULL
caractères seront préfixés par un antislash dans backreferences substitués.Seulement
preg_replace()
utilise modificateur; elle est ignorée par d'autres PCRE fonctions.
Par exemple, ce code, légèrement différent du vôtre:
$bbCode = <<<STR
[quote]
Hello World
[/quote]
STR;
$output = preg_replace("/\[quote\](.+?)\[\/quote\]/es", "'<blockquote>' . trim('\\1') . '</blockquote>'", $bbCode);
var_dump($output);
Souhaitez-vous donner:
string '<blockquote>Hello World</blockquote>' (length=36)
soit le trim
fonction est appelée sur ce qui a été adaptée - constater supprimera tous les espaces blancs- au début et à la fin de votre chaîne; non seulement les nouvelles lignes, mais aussi des espaces et des tableaux.
(Par exemple, vous pouvez jeter un oeil à Exemple # 4 sur le page de manuel de preg_replace
)
(Il est peut-être un peu exagéré dans ce cas, devrais-je ajouter - mais il est bon de savoir de toute façon)