Você está na página 1de 3

Expressões Regulares em Java

Guilherme B. Goulart, Vinicius K. Barcelos, João C. Vitor


1

Resumo. Nesse trabalho almejamos fazer uma breve descrição teórica sobre
os conceitos de linguagens regulares e expressões regulares e posteriormente
realizar uma análise de implementações do pacotejava.util.regex.

1. Linguagem Regular
Uma linguagem regular é uma linguagem formal definida usando um conjunto
finito de regras sintáticas. A partir destas regras, podemos criar uma variedade infinita
de sentenças válidas usando apenas um número finito de sı́mbolos. As linguagens regu-
lares são usadas para representar expressões matemáticas, cálculos lógicos e também em
computação, para a criação de linguagens de programação e processamento de texto.
As linguagens regulares são divididas em duas classes: as linguagens deter-
minı́sticas e as não-determinı́sticas. As linguagens determinı́sticas são aquelas que
podem ser processadas usando um único passo de processamento, enquanto as não-
determinı́sticas requerem mais de um passo. As linguagens regulares determinı́sticas
são mais fáceis de serem processadas, mas às vezes é necessário usar linguagens não-
determinı́sticas para representar expressões matemáticas ou lógicas mais complexas.

2. Expressões Regulares
As expressões regulares são um conjunto de sı́mbolos usados para representar uma
linguagem regular, são compostas por um conjunto de caracteres e são usadas para rep-
resentar um conjunto potencialmente infinito de sequências. Elas são usadas em diversas
áreas, como processamento de texto, busca e substituição de texto, criação de linguagens
de programação e validação de dados.
Expressões regulares são formadas por um conjunto de caracteres que podem ser
usados para representar uma variedade de sequências de caracteres. Cada caractere tem
um significado especı́fico e pode representar um conjunto de caracteres. Por exemplo, o
caractere ”.” pode ser usado para representar qualquer caractere, enquanto o caractere ”*”
pode ser usado para representar zero ou mais ocorrências do caractere anterior.

3. Expressões Regulares em Java


A utilização mais comum das expressões regulares em Java é para editar, filtrar,
encontrar ou fazer qualquer tipo de manipulação em texto.
As expressões regulares são implementadas em Java à partir de uma série de
classes do pacote java.util.regex, sendo as principais a classe Pattern e a classe Matcher.
A classe wrapper de strings, a String também possui o método matches() que pode ser
utilizado para validar expressões regulares.
Um objeto do tipo Pattern representa uma expressão regular especificada em for-
mato de uma string. Portanto, a expressão, primeiramente atribuı́da a uma variável do tipo
String, precisa ser compilada em uma instância da classe de Pattern através do método
“‘compile()“‘. A Pattern resultante é então utilizada para criar um objeto do tipo Matcher
através do método matcher(), que então pode de fato fazer a verificação da expressão
regular utilizando diferentes métodos.
O método matches() da classe Matcher, por exemplo, tenta fazer o match de uma
sequência inteira contra a expressão, já o método find() ’escaneia’ a sequência inteira
procurando por pelo menos uma sequência que satisfaça a expressão.
Uma maneira é usando a classe Pattern do pacote java.util.regex, que fornece um
método chamado matcher() para criar um objeto Matcher. O objeto Matcher pode ser
usado para verificar se uma determinada sequência de caracteres corresponde à expressão
regular. Outra maneira de aplicar expressões regulares em Java é usando a classe String,
que fornece um método chamado matches() que pode ser usado para verificar se uma
determinada sequência de caracteres corresponde à expressão regular.
O exemplo a seguir demonstra como utilizar as classes Pattern e Matcher para
encontrar a palavra ”gato” em uma string:
String input = "O gato sentou no mato";
Pattern pattern = Pattern.compile("gato");
Matcher matcher = pattern.matcher(input);
boolean matchFound = matcher.find();

if(matchFound) {
System.out.println("Match encontrado");
}

No exemplo acima, a classe Pattern é utilizada para definir a expressão regular


”gato” e então a classe Matcher é instanciada através do método matcher() para então ser
utilizada para encontrar a palavra ”gato” na String de input. O método find() da classe
Matcher então retorna verdadeiro se um match foir encontrado ou falso se nenhum match
foi encontrado.
Se quisermos encontrar múltiplos matches em uma string podemos utilizar o
método find() em um loop while:
String input = "O gato sentou no mato";
Pattern pattern = Pattern.compile("gato");
Matcher matcher = pattern.matcher(input);
boolean matchFound = matcher.find();

while(matcher.find()) {
System.out.println("Match encontrado");
}

No exemplo acima iremos printar na tela ”Match found” para cada vez que encon-
trarmos uma ocorrência da palavra ”gato” na string.
Outro exemplo comum de RegEx é utiliza o método replaceAll() da classe
Matcher para substituir todas ocorrências de determinada palavra:
String input = "O gato subiu o morro";
Pattern pattern = Pattern.compile("gato");
Matcher matcher = pattern.matcher(input);
String output = matcher.replaceAll("cachorro");
System.out.println(output);
}

Acima substituı́mos a palavra ”gato” toda vez que ela aparece por ”cachorro” e
então printamos a string resultante. Alternativamente, podemos utilizar o método re-
placeFirst() para substituir apenas na primeira ocorrência da palavra referente à nossa
expressão.
O Java nos traz uma infinidade de possibilidades de expressões regulares que po-
dem ser utilizadas e apenas fizemos uma breve introdução do caso de uso mais simples
possı́vel para demonstrar os principais métodos, mas pode-se construir expressões regu-
lares extremamente complexas e poderosas utilizando a sintaxe combinada de RegEx. Um
exemplo um pouco mais complexo pode utilizar, por exemplo, a expressão ”[ˆA-Za-z]”
para remover todos números de uma string utilizando o método replaceAll().

4. Referências Bibliográficas
NOURIE, Dana; MCCLOSKEY, Mike. Regular Expressions and the Java Pro-
gramming Language. Oracle, 2002. Disponı́vel em: https://www.oracle.com/technical-
resources/articles/java/regex.html. Acesso em: 5 de outubro de 2022.

Você também pode gostar