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 Aguiar



Essa é 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.

Alessandra Lima Aguiar

Alessandra Lima Aguiar - Analista de Sistemas e Desenvolvedora na IBM. Formada em Sistema de Informação na UNISA (Universidade de Santo Amaro) e com um MBA em Tecnologia de Software pela USP (Universidade de São Paulo), atua no mercado de TI desde 1999 e atualmente está focada em desenvolvimento JAVA para ambiente WEB.