Expressão regular... é possivel?

4 respostas
felixcomputer

Pessoal, uma vez eu fiz uma regex para obter o nome das linguagens dentro dos <a
Só que naum ficou muito legal, pq eu usei varios matching groups, gostaria de saber se algum geek em regex sabe fazer eu pegar esses valores com apenas UM matching apenas.
Preciso disso por portabilidade… Alguém consegue?

<a href="/softwaremap/trove_list.php?form_cat=164">C</a>,           <a href="/softwaremap/trove_list.php?form_cat=165">C++</a>

Outra coisa, sem usar replaceAll, pq isso vai ta dentro de um properties

4 Respostas

tmoretto
...
String input = "<a href=\"/softwaremap/trove_list.php?form_cat=164\">C</a>,           <a href=\"/softwaremap/trove_list.php?form_cat=165\">C++</a>";

Pattern p = Pattern.compile("<a[^>]*>|</a>|,");
Matcher m = p.matcher(input);
System.out.println(m.replaceAll(""));
...

Eu usei um replaceAll, serve? :oops:

felixcomputer

Fala tmoretto,

gostei da sua solução, contudo eu estou fazendo um pouco diferente de vc, neste caso, vc está construindo a expressão para excluir o que naum serve, certo? no caso, o que estiver dentro do , ou o ou a virgula, ae vc faz um replace, funciona pra este caso apenas, pq no meu caso faço parser de uma pagina html, e isso naum seria viavel, preciso algo que extrai o que preciso,
a minha solução anterior era assim:

Pattern p = Pattern.compile(Programming Language :\n \\s*<a href=(?:.*?)>(.*?)</li>);

...

matcher.group(1).replaceAll("\\s*<a href=(.*?)>", " ").replaceAll("</a>", "");

E ela é meio que um workaround, ta funcionando, mas como vou “desacoplar” as expressões do codigo fonte colocando-as em arquivos properties, precisaria consertar isso,

Sua solução foi muito boa… mas será que vc conseguiria fazer como descrevi, usando matching groups?
Obrigado desde já

Mantu

Vê se isso aqui funciona pro seu caso:

class REGEX{
	public static void main(String[] args) {
		String input = "<a href=\"/softwaremap/trove_list.php?form_cat=164\">C</a>, <a href=\"/softwaremap/trove_list.php?form_cat=165\">C++</a>";
		Pattern p = Pattern.compile("<a[^>]*>([^<]+)</a>");
		Matcher m = p.matcher(input);
		while(m.find()) {
			System.out.println(m.group(1));
		}
	}
}
felixcomputer

Valeu Mantu!! Funcionou!!
Valeu tbem tmoretto!!
Obrigado pessoal

Criado 29 de março de 2007
Ultima resposta 29 de mar. de 2007
Respostas 4
Participantes 3