Problemas com regex

10 respostas
hcbelias

Eu quero formatar tags…
por exemplo

quero editar de forma que seja transformada em |
com a expressao regular e o metodo abaixo eu consigo isso
str=str.replaceAll("<[^>]*>","|");

porém ele faz isso com todas as tags
eu quero saber como fica a expressao regular para quando dentro da tag houver uma determinada sequencia de caracteres nao faca essa edicao…
por exemplo
str=str.replaceAll(regex,"|");
a sequencia e por exemplo: href

str=
a string depois do metodo fica
str=||;

como e a regex??

10 Respostas

victorwss

Bem, tenta isso:

str=str.replaceAll("<[^(href)]?[^>]*>","|");

Não sei se dá certo (mas acho que não).

hcbelias

nao deu certo…mais alguma sugestao?

T
class LimpaTags {
    public static void main(String[] args) {
	    String s = "<abchref><href src=\"abcdef\"></href>Haha</abchref><href></href>";
		s = s.replaceAll ("(?!<href" + "( src=[^>]+)?" + ">)<[^<]*>", "|");
		// Imprimiu |<href src="abcdef">|Haha|<href>|
		System.out.println (s);
	}
}

Vá até o site do Aurélio Vargas e veja o que o (?!) faz.

hcbelias

nao e isso…
nesse caso…ele edita tudo…menos a tag que contem somente

Guilherme_Gomes

O thingol deu apenas um exemplo, você pode alterar o conteúdo de onde está o href e o src=… por outra coisa, ou deixar algo dinâmico, utilizadno regex. O que importa é a estrutura, e esse exemplo do thingol mostra bem isso.

hcbelias

continuo sem entender…

victorwss

Acho que é melhor você implementar o seu próprio analisador léxico por meio de um autômato finito determinístico do que ficar tentando bolar essas regex malucas.

Mesmo que o código fique significativamente maior, pelo menos será bem mais fácil de entender e de dar manutenção do que ter que trabalhar com essas regex que parecem ter vindo de um campeonato de obfuscated-perl.

hcbelias

assim vc so me complica…pq n tenhu nem ideia de como fazer isso

victorwss

hcbelias:
assim vc so me complica…pq n tenhu nem ideia de como fazer isso

Basicamente você cria um for que vai lendo um caractere de cada vez e mantém um estado interno (que pode ser um número ou o valor de um enum) dizendo o que ele está fazendo.

Acredite, é mais simples do que parece.

T

Como eu já disse antes, uma vez fiz uma applet que envia emails em HTML com imagens. O que eu tive de fazer:

  • O applet invocava uma página do mesmo aplicativo que tinha o HTML gerado do jeito que era preciso
  • Como quem já gerou HTML para email com imagens deve saber, é necessário trocar todos os < img src=“nome da imagem.jpg” > para < img src=“cid:numero maluco” &gt , e mais algumas outras coisas
  • Como não era eu que gerava o HTML, então pus um parser HTML bem bobinho dentro dessa applet (que tinha de rodar em Java 1.1 - Microsoft também, então não tinha acesso a expressões regulares)
Criado 18 de abril de 2008
Ultima resposta 18 de abr. de 2008
Respostas 10
Participantes 4