Desenvolvimento - Java
Localize uma String com a ajuda de uma Expressão Regular
Veja neste artigo como podemos localizar uma String com a ajuda de uma Expressão Regular.
por Alessandra Lima AguiarEssa é uma dica para aquelas situações em que você precisa localizar um valor dentro de uma String de uma forma simples e rápida utilizando uma Expressão regular (regex).
Caso a Expressão regular seja um bicho de sete cabeças ou para o caso de não recordar da sintaxe é sempre bom ter esse site no Favorito do seu browser http://www.regular-expressions.info/reference.html
Para montar esse exemplo simples, utilizei apenas o Eclipse e o JAVA 6.
Bom, vamos para a parte legal da dica, o código!
Primeiro de tudo, criei uma classe e dei o nome de StringUtil.java. Logo após, criei um método estático que recebe dois parâmetros, sendo o primeiro a Expressão Regular e o segundo a string que contém os valores que desejo procurar, neste caso procuramos por e-mails.
O método compile da classe Pattern irá compilar a Expressão regular que recebe.
E, então a classe Matcher irá procurar por valores na variável text que atendam ao que está definido da variável regex.
Sendo assim foi adicionado um while para varrear a string procurando os valores, quando localizado o método group() retorna a string.
/*
* Procurar e Retornar e-mails que estão localizados em uma String.
*
* regex - Qual o pattern do que deseja procurar, no exemplo é um e-mail.
* text - Texto que contém os valores a serem localizados.
* return Uma String com os e-mails.
*/
public static String getEmailInText(String regex, String text) {
if (text==null || regex==null || regex.isEmpty() || text.isEmpty()) {
return "";
}
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(text);
String listaEmail = "";
while (matcher.find()) {
listaEmail += matcher.group() + " ";
}
// Removendo o último espaço
return listaEmail.trim();
}
Agora vamos entender o que fiz no método main.
Na Expressão regular começo com a sintaxe \\w+ o que significa localizar um grupo de caracteres (letras, números, underscores, espaço) que precisa ser seguido por um @; já o + indica que um ou mais caracteres podem aparecer. A mesma regra vale para a próxima sintaxe \\w+\\. a qual irá agrupar caracteres mudando apenas o próximo literal para "."
Apenas para lembrar que o "\\." está sendo escapado (escaped em inglês, já que em Português fica estranho) porque o ponto sozinho em uma regex significa qualquer caracter.
E ao final da expressão \\w+)* após o "." varrerá até o final da string procurando por caracteres.
public static void main(String[] args) {
// Definir um Regex
String regex="(\\w+)@(\\w+\\.)(\\w+)(\\.\\w+)*";
// O texto onde contém os e-mails
String textoComEmail = "Em um texto grande mary@xpto.com.zip.test pode ser necessário procurar por uma lista de e-mails tom@abc.com and harry@zyx.com";
System.out.println("Emails localizados: [" + getEmailInText(regex, textoComEmail) + "]");
}
Essa é a dica, espero que goste. Fiquem a vontade para criticar, comentar, adicionar um novo jeito de resolver o mesmo problema. Até a próxima.