Nandel 1 Denunciar post Postado Abril 5, 2012 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
Bruno Augusto 417 Denunciar post Postado Abril 5, 2012 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
Nandel 1 Denunciar post Postado Abril 5, 2012 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
Bruno Augusto 417 Denunciar post Postado Abril 5, 2012 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