2009-09-23 9 views
1

J'écris un peu de PHP pour convertir BBcode en HTML.Suppression de la première ligne preg_replace

Je voudrais convertir ce BBcode:

[quote] 
Hello World 
[/quote] 

aux personnes suivantes:

<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 dont j'ai besoin, mais mon problème est qu'il traverse les \ n de avant et après 'Hello World', et produit:

<blockquote> 
Hello World 
</blockquote> 

Des idées comment je pourrais résoudre ce problème? Toute aide très appréciée.

Répondre

1

Essayez cette expression régulière:

/\[quote\]\s*(.+?)\s*\[\/quote\]/s 
+0

Cela fonctionne! :) J'étais sûr que j'avais déjà essayé quelque chose comme ça mais évidemment pas. Merci beaucoup Gumbo – Joey

0

Vous devez éviter les barres obliques inverses entre guillemets. Au lieu de "\ [", vous avez besoin de "\\ [".

0

Une possibilité serait d'utiliser le 'e' regex-modifier, pour 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 de des backreferences dans la chaîne de remplacement , il évalue code PHP, et utilise le résultat pour remplacer la chaîne de recherche . Les guillemets simples, les guillemets doubles , les barres obliques inverses (\) et les NULL caractères seront échappés par des barres obliques inverses dans les références arrière substituées.

Seul le preg_replace() utilise ce modificateur ; il est ignoré par d'autres fonctions PCRE .


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) 

-à-dire, la fonction trim est appelée sur ce qui a été adaptée - - notez qu'il supprimera tous les espaces blancs au début et à la fin de votre chaîne; non seulement les nouvelles lignes, mais aussi les espaces et les tabulations.

(Par exemple, vous pouvez jeter un oeil à Exemple # 4 sur le manual page of preg_replace)
(Il est peut-être un peu exagéré dans ce cas, dois-je ajouter - mais il est bon de savoir de toute façon)

+0

Aussi une suggestion valable et cela fonctionne aussi. Merci Pascal – Joey

+0

De rien :-) Amusez-vous! –