Tenho uma aplicação que se conecta via telnet em um equipamento e envia alguns comandos, o mesmo responde no formato xml, porém a minha string vem da seguinte forma:
Olá Pauloperes. Coloque o código que você já fez pra gente analisar, mas o problema deve ser com o caracter “<”. Para montar a expressão regular coloque um “” barra invertida antes do caracter especial.
zoren
com substring não funciona?
pauloperes
Veja minha expressão: “.\<?xml(.)\”
pauloperes
ctdaa
fiz e não funcionou.
ctdaa
A interrogação também é caracter especial…
Tente assim: “\<\?xml(.*)\<\/response\>”
pauloperes
Não funcionou também
ctdaa
Conte mais sobre a lógica do seu programa. Como você está lendo a cadeia de entrada? é um arquivo? está usando readLine?
Se você está tratando uma linha por vez a expressão não vai funcionar mesmo, porque ela está esperando tudo junto. neste caso você vai precisar de dois “matches” um para o início e um para o final, ligar umas flags e ir capturando as linhas após a flag de início estar ligada.
pauloperes
Veja,
No meu método eu recebo uma string, se eu der um print nela aparece todo o conteudo.
[code]
mode display xml
pwd
mode display xml
/
[/code/
ctdaa
Acho que não, mas não custa perguntar… é a segunda vez que você cola o texto do mesmo jeito: tá faltando “>” após o </response… na última linha?
ctdaa
Tente assim, considerando quebras de linha:
“\<\?xml((.|\n)*)\<\/response\>”
pauloperes
Kra,
Show de bola, funcionou, valeu mesmo…
abraço
ctdaa
Disponha, só para completar o tópico, se você está usando Pattern as duas linhas abaixo são equivalentes:
DOTALL faz a expressão “.” incluir quebra de linhas.
pauloperes
Kra agora to com outro problema.
Veja estou efetuando um outro comando onde a string retornada tem mais de 400 linas, quando chega expressão regular gera uma execção: “java.lang.StackOverflowError”, sei que está ocorrendo um estouro da pilha, isto acontece porque a string é muito grande?
Existe alguma forma de corrigir isto?
att,
Paulo
pauloperes
Kra,
Chega ser até piada, mas veja o que eu fiz e funcionou, alterei a expressão regular para:
Cara pra não ter que criar um novo tópico vou perguntar aqui mesmo já que se trata do mesmo assunto, seguinte pessoal eu preciso fazer uma validação através de expressão regular, mas no meu caso eu preciso validar uma expressão matemática, tipo : cos(x)+sin(x), expressões no caso com funções matemáticas, alguém tem alguma idéia de como posso fazer isso através de expressão regular ?
ctdaa
phillip, com certeza dá para fazer, você está no caminho certo. Existem até alguns analisadores sintáticos de linguagens que são baseados em expressões regulares + bnf . Para tratar somente fórmulas matemáticas (se for algo específico, não o livro de algebra completo!) você conseguirá resolver com expressões regulares. Para algo mais complexo sugiro um gerador de parser do tipo JavaCC (https://javacc.dev.java.net/) que tem plugin para eclipse e netbeans.
Pesquisa um pouco sobre o assunto e se tiver problemas vai colocando no forum que o pessoal do GUJ te ajuda.