Expressões Regulares Java


O que é uma Expressão Regular?

Uma expressão regular é uma sequência de caracteres que forma um padrão de pesquisa. Ao pesquisar dados em um texto, você pode usar esse padrão de pesquisa para descrever o que está procurando.

Uma expressão regular pode ser um único caractere ou um padrão mais complicado.

As expressões regulares podem ser usadas para realizar todos os tipos de pesquisa de texto e operações de substituição de texto .

Java não possui uma classe de Expressão Regular embutida, mas podemos importar o java.util.regex pacote para trabalhar com expressões regulares. O pacote inclui as seguintes classes:

  • PatternClasse - Define um padrão (para ser usado em uma pesquisa)
  • MatcherClasse - Usada para procurar o padrão
  • PatternSyntaxExceptionClasse - Indica erro de sintaxe em um padrão de expressão regular

Exemplo

Descubra se há alguma ocorrência da palavra "w3schools" em uma frase:

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Main {
  public static void main(String[] args) {
    Pattern pattern = Pattern.compile("w3schools", Pattern.CASE_INSENSITIVE);
    Matcher matcher = pattern.matcher("Visit W3Schools!");
    boolean matchFound = matcher.find();
    if(matchFound) {
      System.out.println("Match found");
    } else {
      System.out.println("Match not found");
    }
  }
}
// Outputs Match found

Exemplo explicado

Neste exemplo, a palavra "w3schools" está sendo pesquisada em uma frase.

Primeiro, o padrão é criado usando o Pattern.compile()método. O primeiro parâmetro indica qual padrão está sendo pesquisado e o segundo parâmetro tem um sinalizador para indicar que a pesquisa não deve diferenciar maiúsculas de minúsculas. O segundo parâmetro é opcional.

O matcher()método é usado para procurar o padrão em uma string. Ele retorna um objeto Matcher que contém informações sobre a pesquisa realizada.

O find()método retorna true se o padrão foi encontrado na string e false se não foi encontrado.



Bandeiras

Os sinalizadores no compile()método alteram a forma como a pesquisa é realizada. Aqui estão alguns deles:

  • Pattern.CASE_INSENSITIVE - O caso de letras será ignorado ao realizar uma pesquisa.
  • Pattern.LITERAL - Caracteres especiais no padrão não terão nenhum significado especial e serão tratados como caracteres comuns ao realizar uma pesquisa.
  • Pattern.UNICODE_CASE- Use-o junto com a CASE_INSENSITIVEbandeira para ignorar também o caso de letras fora do alfabeto inglês

Padrões de Expressão Regular

O primeiro parâmetro do Pattern.compile()método é o padrão. Ele descreve o que está sendo pesquisado.

Colchetes são usados ​​para encontrar um intervalo de caracteres:

Expression Description
[abc] Find one character from the options between the brackets
[^abc] Find one character NOT between the brackets
[0-9] Find one character from the range 0 to 9

Metacaracteres

Metacaracteres são caracteres com um significado especial:

Metacharacter Description
| Find a match for any one of the patterns separated by | as in: cat|dog|fish
. Find just one instance of any character
^ Finds a match as the beginning of a string as in: ^Hello
$ Finds a match at the end of the string as in: World$
\d Find a digit
\s Find a whitespace character
\b Find a match at the beginning of a word like this: \bWORD, or at the end of a word like this: WORD\b
\uxxxx Find the Unicode character specified by the hexadecimal number xxxx

Quantificadores

Quantificadores definem quantidades:

Quantifier Description
n+ Matches any string that contains at least one n
n* Matches any string that contains zero or more occurrences of n
n? Matches any string that contains zero or one occurrences of n
n{x} Matches any string that contains a sequence of X n's
n{x,y} Matches any string that contains a sequence of X to Y n's
n{x,} Matches any string that contains a sequence of at least X n's

Nota: Se sua expressão precisar procurar um dos caracteres especiais, você pode usar uma barra invertida ( \ ) para escapar deles. Em Java, as barras invertidas em strings precisam ser escapadas, portanto, duas barras invertidas são necessárias para escapar de caracteres especiais. Por exemplo, para pesquisar um ou mais pontos de interrogação, você pode usar a seguinte expressão: "\\?"