Removendo primeira preg_replace de nova linha
-
13-09-2019 - |
Pergunta
Eu estou escrevendo alguns PHP para converter BBCode para HTML.
Eu gostaria de converter o BBcode:
[quote]
Hello World
[/quote]
com o seguinte:
<blockquote>Hello World</blockquote>
A função preg_replace que eu estou usando para executar esta é:
preg_replace("/\[quote\](.+?)\[\/quote\]/s", "<blockquote>\\1</blockquote>", $bbCode);
Esta quase faz tudo o que eu preciso que ele, mas o meu problema é que ele carrega através da \ n é de antes e depois 'Olá Mundo', e produz:
<blockquote>
Hello World
</blockquote>
Alguma idéia de como eu poderia corrigir isso? Toda a ajuda muito apreciado.
Solução
Tente esta expressão regular:
/\[quote\]\s*(.+?)\s*\[\/quote\]/s
Outras dicas
Você precisa escapar as barras invertidas dentro de aspas duplas. Em vez de "\ [", você precisa de "\\ [".
Uma possibilidade seria usar o 'e
' regex-modificador , para chamar, por exemplo, a função trim
na corda.
Citando essa página do manual:
e (
PREG_REPLACE_EVAL
)
Se este modificador é definido,preg_replace()
faz a normal substituição de backreferences na substituição corda, avalia como código PHP, e utiliza o resultado para substituir o seqüência de pesquisa. aspas simples, dupla citações, barras invertidas (\
) eNULL
caracteres serão escapou por barras invertidas em backreferences.Apenas
preg_replace()
usa esta modificador; ele é ignorado por outros PCRE funções.
Por exemplo, este código, apenas ligeiramente diferente da sua:
$bbCode = <<<STR
[quote]
Hello World
[/quote]
STR;
$output = preg_replace("/\[quote\](.+?)\[\/quote\]/es", "'<blockquote>' . trim('\\1') . '</blockquote>'", $bbCode);
var_dump($output);
iria dar-lhe:
string '<blockquote>Hello World</blockquote>' (length=36)
ou seja, a função trim
é chamado sobre o que foi combinado - nota que irá remover todos os espaços em branco no início e no final de sua corda; não só newlines, mas também espaços e tabulações.
(Por exemplo, você pode dar uma olhada no Exemplo # 4 na página do manual de preg_replace
)
(é talvez um pouco exagero neste caso, devo acrescentar - mas é bom saber de qualquer maneira)