À cerca de um mês atrás postei aqui no forum uma dúvida acerca deste assunto e acabei por ter (pensava eu) a solução mas à pouco descubri que afinal a solução tem um pequeno “bug”…
Eu estou a fazer um forum em java, e na parte dos posts queria que sempre que alguem escreve por exemplo:
bla bla bla bla bla
ele construa uma tabela… com o texto “bla bla bla bla bla” dentro.
E para isso usei a regular expression “[code]((.|\s)*?)[/code]”, e pronto, até aqui funciona tudo muito bem… ele constroi a tabela… o problema é quando alguem escreve algo do tipo:
gdfhdfh[code]sdgsdg[/code]
ele neste caso constroi a tabela entre o 1º e o 1º … em vez de construir uma entre o 1º e 2º e outra entre o 2º e o 1º …
Qual é a solucao para isto? Eu poderia criar o meu proprio metodo para fazer isso mas se for possivel usar uma regular expression para fazer isto por mim seria tudo bastante mais simples… alguem sabe como fazer isto?
Voce pode fazer por “partes”, que se adapta a mais situacoes e que seria bem mais simples do que bolar uma regex mais complicada… Em outras palavras, voce faz um match para , substituindo pelos comandos de abrir tabela e celula, e um outro match para , dessa vez substituindo por fechar celula e tabela.
Eu pensei nisso, mas não ia resultar bem porque alguem podia escrever apenas [/code] e guardar a mensagem… isso iria estragar a formação toda das tabelas html do forum quando fosse a apresentar a thread. Por isso eu tenho mesmo que confirmar que existe o inicio e o fecho.
[quote=“Morcego”]
E para isso usei a regular expression “code[/code]”, e [/quote]
em perl voce teria que mandar um /g no final da regex para dizer que eh para fazer mais de um match. No javadoc de java.util.regex.Pattern os caras dizem que para atingir o mesmo objetivo, tem que mandar o methodo find varias vezes. vc ja tentou isto?
Não uso a class Match… uso o metodo replaceAll(String pattern, String replace) da class String… pode arranjar um exemplo usando a class Match ? acha q isso vai resolver o meu problema?
nested tags é um negócio muito trash de se fazer com re, melhor seria você escrever um parser sgml bem simples para o seu caso ou ainda apelar para os métodos da classe String, assim: