REGEX - negar String  XML
Índice dos Fóruns » Java Avançado
Autor Mensagem
felixcomputer
JavaTeenager
[Avatar]

Membro desde: 07/06/2006 11:12:19
Mensagens: 171
Localização: Belém - Pa
Offline

Galera, to com um problemão:

Preciso reconhecer tudo o que existe dentro de uma tag, no caso:



Isso não é problema, funciona legal, o problema é que existe uma tag, vou chamá-la de falsa
que não termina com </UML:Class> e não deve ser capturada ...


O problema é que já tentei de tudo para capturar apenas a primeira tag, no caso a verdadeira, mas ele sempre pega as duas...

Me deparei com a seguinte situação: Ele captura tudo isso ae...
A falsa está dentro de uma tag que a verdadeira não esta, no caso a tag <UML:Namespace.ownedElement>



Entretanto, ele captura tudo entre a <tagfalsa> e a </tagverdadeira>

A minha regex para esse problema foi a seguinte, o eu tento negar a expressão namespace atraves do (?!):


Alguém pode me ajudar?

Aqui está o XML para teste:

A primeira tag class é a tag falsa e a segunda é a verdadeira

P.s: Não posso fazer parser com o DOM

Samuel Félix
O temor do Senhor é o principio da sabedoria!
http://sfelixjr.googlepages.com
[Email] [WWW] [MSN]
peczenyj
Moderador
[Avatar]

Membro desde: 26/03/2006 23:25:37
Mensagens: 3191
Localização: Rio de Janeiro
Offline

Vou dar um exemplo com sed



Ok, vc vai dizer "q diabos é isso".

Bom, a expressão regular que vc está procurando é demasiada complexa.

O que eu fiz:
-Removi do arquivo os trechos que tem o código indesejado (com o comando d do sed)
-Depois eu procurei a tag esperada (e imprimi com o comando p do sed)

Tenho certeza que o Perl suporta um tipo de expressão que nega uma string inteira (o padrão é negar um conjunto de caracteres [^lista] ou inverter a lógica do match se vc esta fazendo uma busca).

Minha sugestão: remova as tags indesejadas e depois procure o que vc deseja

This message was edited 1 time. Last update was at 04/03/2008 20:56:48


http://pacman.blog.br

'Não importa quanto alguém se dedique à tarefa. Ninguém consegue fazer a água da cascata cair para cima.'
[WWW]
felixcomputer
JavaTeenager
[Avatar]

Membro desde: 07/06/2006 11:12:19
Mensagens: 171
Localização: Belém - Pa
Offline

Olá peczenyj,

primeiramente, obrigado pela sua ajuda, entretanto, eu não tenho essa liberdade toda(remover o que é desnecessário) acerca o XML,
pq trata-se de um plugin do eclipse que está sendo extendido, e devido ao fato de eu criar a expressão que o plugin irá reconhecer, não posso excluir nada, ou usar replaceAll por exemplo, nem tampouco usar mais de uma expressão, ou usar o linux com o sed...

é preciso uma expressão só que pegue tudo de uma só vez... e realmente... é demasiada complexa...
Mas obrigado mesmo assim...

Alguém conseguiria construir essa expressão?
Obrigado a todos

Samuel Félix
O temor do Senhor é o principio da sabedoria!
http://sfelixjr.googlepages.com
[Email] [WWW] [MSN]
thingol
Moderador

Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline

Em Perl e Java você usaria "(?!". Para mais detalhes, veja o site do sr. Aurélio:

http://www.aurelio.net/er/
[WWW]
felixcomputer
JavaTeenager
[Avatar]

Membro desde: 07/06/2006 11:12:19
Mensagens: 171
Localização: Belém - Pa
Offline

Sim sim... foi de la que eu vi isso (?! e utilizei na expressão que está no primeiro topico desse forum...
mas num consegui fazer funcionar... =(

Samuel Félix
O temor do Senhor é o principio da sabedoria!
http://sfelixjr.googlepages.com
[Email] [WWW] [MSN]
thingol
Moderador

Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline

Desculpe, mas eu falei "(?!", não "(?si", que faz o seguinte: s = "DOTALL" (ou seja, as quebras de linhas são capturadas por ".", e i = "CASE_INSENSITIVE". )

Vou dar um exemplo do uso de "(?!" (que tem um nome esotérico na documentação do Java - "(?!X) X, via zero-width negative lookahead".

Rode o exemplo abaixo.



[WWW]
thingol
Moderador

Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline

Aham, o exemplo abaixo é um pouco mais fácil de compreender. Eu quero que a expressão regular bata com "< img src= alguma coisa", mas não com as "< img src = "/WBCM". Eu postei este exemplo há algum tempo atrás.

[WWW]
felixcomputer
JavaTeenager
[Avatar]

Membro desde: 07/06/2006 11:12:19
Mensagens: 171
Localização: Belém - Pa
Offline

Ola thingol, tenho certeza que vc falou (?!, olha como tava a expressão no primeiro topico:

<UML[:]Class xmi.id = (?!<UML[:]Namespace[.]ownedElement(?:.*?)/>(?si)(.*?)</UML[:]Class>

Vou dar uma olhada no que vc escreveu..
obrigado

This message was edited 1 time. Last update was at 05/03/2008 10:34:10


Samuel Félix
O temor do Senhor é o principio da sabedoria!
http://sfelixjr.googlepages.com
[Email] [WWW] [MSN]
 
Índice dos Fóruns » Java Avançado
Ir para:   
Powered by JForum 2.1.8 © JForum Team