Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Josuel S.H

preg_replace ordem de substituição

Recommended Posts

Bom dia a todos do fórum, estou precisando da ajuda de vocês aqui do fórum, pois já testei pesquisar e não consegui achar nada a respeito.

Bom, então vamos lá, é o seuginte pessoal...

 

Na minha expressão regular para substituição estou usando o preg_replace, para substituição ele está pegando a primeira tag e a próxima em seguida, esse é o problema, preciso fazer com que ele pegue a primeira tag e depois para finalizar não a próxima, mas sim a última.

 

Vou mostrar um exemplo para explicar melhor a vocês

 

$a = "/\[tag\](.*?)\[\/tag\]/is";

$b = "<tag>$1</tag>";

 

$texto = preg_replace($a, $b, $texto);

 

Se eu jogar em meu $texto o seguinte: [tag]Teste[/tag], funcionará normalmente, então ficará em html: <tag>Teste</tag>, até aí está correto, o problema começa agora, se eu colocar pra seguinte forma: [tag]Teste 1 [tag]Teste 2[/tag] Teste 3[/tag], então dessa forma ficará com problemas, resultando no seguinte: <tag>Teste 1 [tag]Teste 2</tag> Teste 3[/tag]. Viram que se eu usar um dentro do outro não substitui corretamente, porque ele está localizando o primeiro([tag]) e o próximo de encerramento([/tag]), para resolver ao invés dele procurar o primeiro e o próximo, teria que ser o primeiro e o último, sempre nessa ordem para ser retornado de forma correta: <tag>Teste 1 <tag>Teste 2</tag> Teste 3</tag>

 

Atual está localizando assim:

[tag]Teste 1 [tag]Teste 2[/tag] Teste 3[/tag] : resultando > <tag>Teste 1 [tag]Teste 2</tag> Teste 3[/tag]

 

Preciso fazer com que ele localize da seguinte forma:

[tag]Teste 1 [tag]Teste 2[/tag] Teste 3[/tag] : resultado > <tag>Teste 1 <tag>Teste 2</tag> Teste 3</tag>

 

Ou seja, localizar das extremidades até o centro.

 

 

Agradeço a todos que puderem me ajudar nisso.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não entendi muito bem mais segue uma sugestão

$tags = '[tag]Teste 1 [tag]Teste 2[/tag] Teste 3[/tag]';
$tags = str_replace(array('[',']'), array('<','>'), $tags);
echo $tags; //<tag>Teste 1 <tag>Teste 2</tag> Teste 3</tag>

espero ter ajudado

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.