Ir para conteúdo

POWERED BY:

Arquivado

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

Nandel

[Resolvido] Expressão Regular

Recommended Posts

Tenho a necessidade de fazer uma substituição do conteúdo de uma variável quando certa ocorrência acontecer.

 

bem seria para a "montagem" do layout onde seria o que possui entre {{IF FOTO}} QUALQUER COISA {{ENDIF FOTO}}.

 

infelizmente meu conhecimento de expressões regulares é muito pequeno e estou com o seguinte código:

 

$layout = preg_replace('#[{{IF FOTO}}]+[*]+[{{ENDIF FOTO}}]#', '', $layout);

 

Gostaria muito da ajuda para montar esta expressão. No código citado acima ele encontra a ocorencia e REMOVE tudo (não funciona com o seguinte erro: "Warning: preg_replace() [function.preg-replace]: Compilation failed: nothing to repeat at offset 14 in aquivo.php")

 

Se possível gostaria de também se alguem tiver conhecimentos de bibilhotecas para estudo dessas expressões.

 

OBS: Desta forma funciona:

 

$layout = str_ireplace(substr($layout, stripos($layout, '{{IF FOTO}}'), stripos($layout, '{{ENDIF FOTO}}') - stripos($layout, '{{IF FOTO}}') + 14), '', $layout);

 

Atenciosamente,

Nandel

Compartilhar este post


Link para o post
Compartilhar em outros sites

Primeiramente vamos te ajudar com o seu "conhecimento muito pequeno de Expressões Regulares".

 

Quando se fala em ER (para os íntimos), no Brasil, logo se vem à cabeça o Guia ER do Aurélio (não é o dicionário).

 

Estude esse guia com carinho. Para o seu problema você precisa do necessitado não-guloso opcional, com apoio de retrovisores e talvez da criptonita.

 

Quanto à sua implementação sem ER, também é válida. Ela só tem dois problemas:

 

- Essas funções de localizam e substituição de strings podem retornar FALSE, então para se prevenir contra isso, você deveria forçar o cast para (int) antes delas.

 

O problema disso é que (int) FALSE é igual a zero e sua limpeza pode acabar apagando tudo.

 

- O segundo problema é aquele 14 literal. Hoje você tem que 14 ajusta certinho. Mas e amanhã? Vai que muda para 13 ou 15? Vai ter que mexer no código e ajustar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Exatamente pelos problemas citados que descidi mudar a forma como era feito isso.

 

apesar que na verdade isso é feito dentro de uma repetição com centenas de "variáveis" e o "14" na vdd era um strlen().

 

Obrigado pelas instruções, foram de grande ajuda.

 

para quem tiver interesse o código:

$layout = preg_replace('^{{(IF FOTO)}}.*{{END\1}}^', '', $layout)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Melhor do que saber que pude ajudar alguém é saber que esse alguém (no caso você) não ficou parado esperando o peixe limpo e assado e sim recebeu o material, foi atrás, estudou aprendeu, fez sozinho e ainda compartilho de livre e espontânea vontade a solução para o problema.

 

:clap:

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.