rvlira 0 Denunciar post Postado Junho 25, 2009 Pessoal, Estou tentando fazer uma espécie de implementação do BBCODE. Tenho uma string com o seguinte texto: [b]teste[/b] [b]outro [/b] Estou aplicando nele a seguinte expressão regular: $resultado = preg_replace('/(\[[Bb]])(.*)(\[\/[Bb]])/', '<b>\\2</b>', $texto); Para o texto acima, a palavra "teste" ganha o negrito corretamente, porém "outro" não recebe. Ele não está conseguindo fazer o match da expressão regular porque a tag inicial ("") está numa linha diferente da tag final (""). Imagino que deva existir uma forma de fazer com que o ele tente fazer o match procurando pelas demais linhas, não? Agradeço pela ajuda. Compartilhar este post Link para o post Compartilhar em outros sites
rvlira 0 Denunciar post Postado Junho 25, 2009 Parece que consegui avançar um pouco no problema. Havia me esquecido do "/s" no final da expressão regular. Com ele o "." passa a representar "\r\n" também. O problema agora é que ao utilizar a expressão regular desta forma, o "/s" faz com que ele busque até a última ocorrência da tag final para fazer o match. Ou seja, se eu tivesse a string: [b]teste[/b] [i]bla[/i] [b]outro [/b] E aplicasse: $resultado = preg_replace('/(\[[Bb]])(.*)(\[\/[Bb]])/s', '<b>\\2</b>', $texto); O HTML gerado seria: <b>teste[/b] [i]bla[/i] [b]outro </b> Em vez de: <b>teste</b> [i]bla[/i] <b>outro </b> Alguém saberia como eu poderia alterar essa expressão regular? Desde já agradeço. Att, Compartilhar este post Link para o post Compartilhar em outros sites
Fernando Rodrigo Cardoso 2 Denunciar post Postado Junho 25, 2009 $resultado = preg_replace("/(\[[Bb]\])(.+?)(\[\/[Bb]\])/s", "<b>$2</b>", $texto); * casa qualquer coisa até a ultima ocorrência "(\[\/[bb]\])" , por isto substitua por (.+?) flws Compartilhar este post Link para o post Compartilhar em outros sites
rvlira 0 Denunciar post Postado Junho 25, 2009 Fernando, muito obrigado. Funcionou perfeitamente. Eu na verdade não entendi exatamente o por quê de ter funcionado. Tenho quase certeza que eu já tinha tentado "(.+?)". Enfim... Vou voltar aos livros de RegExp, hehehehe... t+! Compartilhar este post Link para o post Compartilhar em outros sites