Fala galera…blz??
seguinte, tenho uma string q vem no formato:
<a><li>Nome do aplicativo</li></a>
como eu poderia fazer split nessa string a fim de pegar apenas o Nome do aplicativo??
alguma ideia??
valew
Fala galera…blz??
seguinte, tenho uma string q vem no formato:
<a><li>Nome do aplicativo</li></a>
como eu poderia fazer split nessa string a fim de pegar apenas o Nome do aplicativo??
alguma ideia??
valew
pq vc nao faz um parser com expresão regular q retira todas as tags html??
hmm…algum exemplinho de parser?? :oops: :oops:
String pattern = “\<li\>[\w]*\<\\li\>”;
Isso pegará “<li>qualquer frase</li>”.
String pattern = “&lt;li>[\w]*<\li>”;Isso pegará “
qualquer frase ”.
valew destro, mas nao entendi como usar essa String de patterns…
more details, please??
thanx
Pattern.matches ("String pattern do danielDestro", "String a ser testada");
retorna true ow false de acordo com o que voce passa.
dá pra ser usada tb em
String.replaceAll ("String pattern do danielDestro", "String a ser usada")
There you go: http://java.sun.com/docs/books/tutorial/extra/regex/
ai, ai… expressão regular é lindo… ((;
parabéns ao cara que pensou nisso… ((;
hehehehe
sem exageros meu caro bandrade, já vi muitos códigos ilegiveis e cada expressao regular de dar medo.
nesse caso é útil,
agora pq esse tópico está em off-topic ?
nossa…
o tico-e-teco aki hj tao devagar…
destro, essa string q vc passou nem compilou no meu codigo…
valew
É que eu nunca sou bom em lembrar exatamente a sintaxe correta dos patterns. Mas dá uma lida no link que te passe que você vai ver que é fácil.
Eu arrumei o pattern.
nada feito ainda…
to fazendo assim:
String teste = new String("<li><a>Teste</a></li>");
Pattern p = Pattern.compile("\<li\><a\>[\w]*\<\\a\><\\li\>");
String[] a = p.split(teste);
for (int i=0; i<a.length; i++)
{
System.out.println(a[i]);
}
e ele imprime exatamente a mesma String original…
valew>
CLARO
Isso quer dizer que está SIM funcionando. O seu pattern pega justamente o que pediu.
hmm…
entao ele vai pegar o q eu passar no compile(), eh isso??
nao kero q ele pegue as tags HTML…apenas o texto dentro delas…
valew
coloca assim (\<li\><a\>)([\w]*)(\<\\a\><\\li\>)
e manda pegar o que der match apenas com a 2a parte da sua expressao… nesse caso o 2o parenteses.
Una preguntita … se essa string não fosse tão pequena não daria para usar um XML parser ? 
Logo vocês estão rindo porque um XML Parser é uma coisa grande demais para efetuar o parse de uma string tão simples.
Mas é isso que mata no XML.
Mesmo usar o DOM4J (que é uma API bastante simples) já é meio pesado.
galera, ainda nao consegui fazer esse pattern funcionar como deveria…
alguem pode dar uma ajuda mais pratica??
valew
Você ao menos leu o tutorial sobre Regexp que te passei?
Matando mosquito com canhão, parte 1
import java.util.regex.*;
class TestParse {
public static void main(String[] args) {
String str = "<a><li>Nome do aplicativo</li></a>";
Pattern pat = Pattern.compile ("<a><li>([^<]+)</li></a>");
Matcher mat = pat.matcher (str);
if (mat.matches()) {
System.out.println (mat.group(1));
}
}
}
eu li sim, destro…mas concorda q aprender regular expressions em 1/2 hora eh meio complicado?? tenho q fazer isso funcionar logo…
valew
Matando mosquito com canhão, parte 1import java.util.regex.*; class TestParse { public static void main(String[] args) { String str = "<a><li>Nome do aplicativo</li></a>"; Pattern pat = Pattern.compile ("<a><li>([^<]+)</li></a>"); Matcher mat = pat.matcher (str); if (mat.matches()) { System.out.println (mat.group(1)); } } }
valew thingol…
mas uma duvida…se a tag “” vier com algum atributo, ele funciona tb??
valew
Ai não funfa. Nem com espaços. Você tem q criar uma regexp que assuma isso.
Que tal usar o DOM4J?
Eu sei que é matar mosquito com canhão, parte 2, mas aí já leva em conta todas essas particularidades (como atributos etc.)
Que tal usar o DOM4J?
Eu sei que é matar mosquito com canhão, parte 2, mas aí já leva em conta todas essas particularidades (como atributos etc.)
talvez resolva de vez isso…
como ele funfa, please?
Funfa com HTML mal formatado?
HTML mal formatado? Não senhor. Para tais monstros é melhor usar um parser HTML mesmo.
Eu ficaria com regexp mesmo.
Então vamos lá, regexp parte 2 - matando mosquito com canhão, agora com mira a laser
import java.util.regex.*;
class TestParse {
public static void main(String[] args) {
String str = "<a href='http://java.sun.com'><li class=\"itemClass\">Nome do aplicativo</li></a>";
Pattern pat = Pattern.compile ("<li[^>]*>([^<]+)</li>", Pattern.CASE_INSENSITIVE);
Matcher mat = pat.matcher (str);
if (mat.find()) {
System.out.println (mat.group(1));
} else {
System.out.println ("nao bate");
}
}
}
A expressão regular para remover os atributos está errada, eu sei, porque se houver algum “>” dentro de um atributo, vai dar problemas. Mas se nunca houver “>” dentro de atributos acho que dá para encarar. (A expressão correta seria bem mais complicada)
<li[^>]*>([^<]+)</li>
Isso já parece conversa de programador Perl, daqui a pouco vai entrar um expert Perl em regexps nessa história toda…
impressao minha ou esse negocio de usar regexp pode falhar no caso de atributos bizarros do tipo:
A expressão regular para remover os atributos está errada, eu sei, porque se houver algum “>” dentro de um atributo, vai dar problemas. Mas se nunca houver “>” dentro de atributos acho que dá para encarar. (A expressão correta seria bem mais complicada)
<li[^>]*>([^<]+)</li>
eh justamente o q eu tinha perguntado acima hehehe
melhor um parser xml mesmo
Mas usando algo que pega todos os caracteres até achar “>” (non Greedy) funciona na boa.
Já fiz isso.
string.replaceAll("<a><li>", " ");
string.replaceAll("</li></a>", " ");
resolvido
8)
string.replaceAll("<a><li>", " "); string.replaceAll("</li></a>", " ");resolvido
![]()
8)
Vai além disso.
puts… replace não…
me explica… pra que vc coloca uma tag dentro de uma propriedade??
vai por “<.*>”
dah um replace usando expressao regular, substitui “<.*?>” por “”
resolve seu prblema.
string.replaceAll("<a><li>", " "); string.replaceAll("</li></a>", " ");resolvido
![]()
8)
Vai além disso.
exato…resolvi o problema desse modo…
portletName = portletName.replaceAll("</","><");
portletName = portletName.replaceAll("<li([^>]+)?><a([^>]+)?>"," ");
portletName = portletName.replaceAll("<a><li>"," ");
valew pela forca…
nusga… 3 replaces…