Java Regex - Guia rápido

Java fornece o pacote java.util.regex para correspondência de padrões com expressões regulares. As expressões regulares Java são muito semelhantes à linguagem de programação Perl e muito fáceis de aprender.

Uma expressão regular é uma sequência especial de caracteres que ajuda a encontrar ou encontrar outras strings ou conjuntos de strings, usando uma sintaxe especializada mantida em um padrão. Eles podem ser usados ​​para pesquisar, editar ou manipular texto e dados.

O pacote java.util.regex consiste principalmente nas três classes a seguir -

  • Pattern Class- Um objeto Pattern é uma representação compilada de uma expressão regular. A classe Pattern não fornece construtores públicos. Para criar um padrão, você deve primeiro invocar um de seuscompile()métodos, que retornarão um objeto Pattern. Esses métodos aceitam uma expressão regular como o primeiro argumento.

  • Matcher Class- Um objeto Matcher é o mecanismo que interpreta o padrão e executa operações de correspondência em uma string de entrada. Como a classe Pattern, Matcher não define construtores públicos. Você obtém um objeto Matcher invocando omatcher() método em um objeto Pattern.

  • PatternSyntaxException - Um objeto PatternSyntaxException é uma exceção não verificada que indica um erro de sintaxe em um padrão de expressão regular.

Capturar grupos é uma forma de tratar vários personagens como uma única unidade. Eles são criados colocando os caracteres a serem agrupados dentro de um conjunto de parênteses. Por exemplo, a expressão regular (cachorro) cria um único grupo contendo as letras "d", "o" e "g".

Os grupos de captura são numerados contando seus parênteses de abertura da esquerda para a direita. Na expressão ((A) (B (C))), por exemplo, existem quatro desses grupos -

  • ((A)(B(C)))
  • (A)
  • (B(C))
  • (C)

Para descobrir quantos grupos estão presentes na expressão, chame o método groupCount em um objeto correspondente. O método groupCount retorna umint mostrando o número de grupos de captura presentes no padrão de correspondência.

Também existe um grupo especial, o grupo 0, que sempre representa a expressão inteira. Este grupo não está incluído no total relatado por groupCount.

Exemplo

O exemplo a seguir ilustra como encontrar uma string de dígitos da string alfanumérica fornecida -

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

public class RegexMatches {
   public static void main( String args[] ) {
      // String to be scanned to find the pattern.
      String line = "This order was placed for QT3000! OK?";
      String pattern = "(.*)(\\d+)(.*)";

      // Create a Pattern object
      Pattern r = Pattern.compile(pattern);

      // Now create matcher object.
      Matcher m = r.matcher(line);
      
      if (m.find( )) {
         System.out.println("Found value: " + m.group(0) );
         System.out.println("Found value: " + m.group(1) );
         System.out.println("Found value: " + m.group(2) );
      } else {
         System.out.println("NO MATCH");
      }
   }
}

Isso produzirá o seguinte resultado -

Resultado

Found value: This order was placed for QT3000! OK?
Found value: This order was placed for QT300
Found value: 0

Introdução

o java.util.regex.MatchResultinterface representa o resultado de uma operação de correspondência. Essa interface contém métodos de consulta usados ​​para determinar os resultados de uma correspondência com uma expressão regular. Os limites de correspondência, grupos e limites de grupo podem ser vistos, mas não modificados por meio de um MatchResult.

Declaração de interface

A seguir está a declaração para java.util.regex.MatchResult interface -

public interface MatchResult

Métodos de interface

Sr. Não Método e Descrição
1 pretender()

Retorna o deslocamento após o último caractere encontrado.

2 int end (int group)

Retorna o deslocamento após o último caractere da subsequência capturada por um determinado grupo durante esta partida.

3 Grupo de strings ()

Retorna a subsequência de entrada correspondida pela correspondência anterior.

4 Grupo de strings (grupo interno)

Retorna a subsequência de entrada capturada por um determinado grupo durante a operação de correspondência anterior.

5 int groupCount ()

Retorna o número de grupos de captura neste padrão de resultado de correspondência.

6 int start ()

Retorna o índice inicial da correspondência.

7 início interno (grupo interno)

Retorna o índice inicial da subsequência capturada pelo grupo fornecido durante esta partida.

Introdução

o java.util.regex.Pattern classe representa uma representação compilada de uma expressão regular.

Declaração de classe

A seguir está a declaração para java.util.regex.Pattern classe -

public final class Pattern
   extends Object
      implements Serializable

Campo

A seguir estão os campos para java.util.regex.Duration classe -

  • static int CANON_EQ - Ativa a equivalência canônica.

  • static int CASE_INSENSITIVE - Ativa a correspondência sem distinção entre maiúsculas e minúsculas.

  • static int COMMENTS - Permite espaços em branco e comentários no padrão.

  • static int DOTALL - Ativa o modo dotall.

  • static int LITERAL - Ativa a análise literal do padrão.

  • static int MULTILINE - Ativa o modo multilinha.

  • static int UNICODE_CASE - Ativa a dobradura de maiúsculas com reconhecimento de Unicode.

  • static int UNICODE_CHARACTER_CLASS - Ativa a versão Unicode de classes de caracteres predefinidas e classes de caracteres POSIX.

  • static int UNIX_LINES - Ativa o modo de linhas Unix.

Métodos de aula

Sr. Não Método e Descrição
1 compilação de padrão estático (String regex)

Compila a expressão regular fornecida em um padrão.

2 compilação de padrão estático (String regex, sinalizadores int)

Compila a expressão regular fornecida em um padrão com os sinalizadores fornecidos.

3 sinalizadores int ()

Retorna os sinalizadores de correspondência desse padrão.

4 Matcher matcher (entrada CharSequence)

Cria um matcher que corresponderá à entrada fornecida com este padrão.

5 correspondências booleanas estáticas (String regex, entrada CharSequence)

Compila a expressão regular fornecida e tenta combinar a entrada fornecida com ela.

6 Padrão de string ()

Retorna a expressão regular a partir da qual este padrão foi compilado.

7 Citação de String estática (String s)

Retorna uma String de padrão literal para a String especificada.

8 String [] split (entrada CharSequence)

Divide a sequência de entrada fornecida em torno das correspondências desse padrão.

9 String [] split (entrada CharSequence, limite interno)

Divide a sequência de entrada fornecida em torno das correspondências desse padrão.

10 String toString ()

Retorna a representação de string deste padrão.

Métodos herdados

Esta classe herda métodos das seguintes classes -

  • Java.lang.Object

Introdução

o java.util.regex.Matcher classe atua como um mecanismo que executa operações de correspondência em uma sequência de caracteres, interpretando um padrão.

Declaração de classe

A seguir está a declaração para java.util.regex.Matcher classe -

public final class Matcher
   extends Object
      implements MatchResult

Métodos de aula

Sr. Não Método e Descrição
1 Matcher appendReplacement (StringBuffer sb, substituição de string)

Implementa uma etapa não terminal de anexar e substituir.

2 StringBuffer appendTail (StringBuffer sb)

Implementa uma etapa de anexar e substituir de terminal.

3 pretender()

Retorna o deslocamento após o último caractere encontrado.

4 int end (int group)

Retorna o deslocamento após o último caractere da subsequência capturada por um determinado grupo durante a operação de correspondência anterior.

5 boolean find ()

Tenta encontrar a próxima subsequência da sequência de entrada que corresponda ao padrão.

6 boolean find (int start)

Redefine esse matcher e, em seguida, tenta encontrar a próxima subsequência da sequência de entrada que corresponde ao padrão, começando no índice especificado.

7 Grupo de strings ()

Retorna a subsequência de entrada capturada por um determinado grupo durante a operação de correspondência anterior.

8 Grupo de strings (nome da string)

Retorna a subseqüência de entrada capturada pelo grupo de captura nomeado durante a operação de correspondência anterior.

9 int groupCount ()

Retorna o número de grupos de captura neste padrão de correspondência.

10 boolean hasAnchoringBounds ()

Consulta a ancoragem dos limites da região para este matcher.

11 boolean hasTransparentBounds ()

Consulta a transparência dos limites da região para este matcher.

12 hitEnd boolean ()

Retorna verdadeiro se o final da entrada foi atingido pelo mecanismo de pesquisa na última operação de correspondência realizada por este matcher.

13 boolean lookingAt ()

Tenta combinar a sequência de entrada, começando no início da região, com o padrão.

14 correspondências booleanas ()

Tenta combinar toda a região com o padrão.

15 Padrão padrão ()

Retorna o padrão interpretado por este matcher.

16 static String quoteReplacement (String s)

Retorna uma string de substituição literal para a String especificada.

17 Região do Matcher (int start, int end)

Define os limites da região deste matcher.

18 int regionEnd ()

Informa o índice final (exclusivo) da região deste matcher.

19 int regionStart ()

Informa o índice inicial da região deste matcher.

20 String replaceAll (substituição de string)

Substitui cada subsequência da sequência de entrada que corresponde ao padrão com a string de substituição fornecida.

21 String replaceFirst (substituição de string)

Substitui a primeira subsequência da sequência de entrada que corresponde ao padrão com a string de substituição fornecida.

22 boolean requireEnd ()

Retorna verdadeiro se mais entradas puderem transformar uma correspondência positiva em negativa.

23 Reinicialização do Matcher ()

Reinicia este matcher.

24 Reinicialização do Matcher (entrada CharSequence)

Reinicia este matcher com uma nova sequência de entrada.

25 int start ()

Retorna o índice inicial da correspondência anterior.

26 início interno (grupo interno)

Retorna o índice inicial da subsequência capturada pelo grupo fornecido durante a operação de correspondência anterior.

27 MatchResult toMatchResult ()

Retorna o estado de correspondência deste matcher como MatchResult.

28 String toString ()

Retorna a representação de string deste matcher.

29 Matcher useAnchoringBounds (boolean b)

Define a ancoragem dos limites da região para este matcher.

30 Matcher usePattern (padrão newPattern)

Altera o padrão que este Matcher usa para encontrar correspondências.

31 Matcher useTransparentBounds (boolean b)

Define a transparência dos limites da região para este matcher.

Métodos herdados

Esta classe herda métodos das seguintes classes -

  • Java.lang.Object

Introdução

o java.util.regex.PatternSyntaxException classe representa uma exceção não verificada lançada para indicar um erro de sintaxe em um padrão de expressão regular.

Declaração de classe

A seguir está a declaração para java.util.regex.PatternSyntaxException classe -

public class PatternSyntaxException
   extends IllegalArgumentException

Construtores

Sr. Não Método e Descrição
1 PatternSyntaxException(String desc, String regex, int index)

Constrói uma nova instância desta classe.

Métodos de aula

Sr. Não Método e Descrição
1 String getDescription()

Recupera a descrição do erro.

2 int getIndex()

Recupera o índice de erro.

3 String getMessage()

Retorna uma string multilinha contendo a descrição do erro de sintaxe e seu índice, o padrão de expressão regular incorreto e uma indicação visual do índice de erro dentro do padrão.

4 String getPattern()

Recupera o padrão de expressão regular incorreto.

Métodos herdados

Esta classe herda métodos das seguintes classes -

  • Java.lang.Throwable
  • Java.lang.Object

Exemplo

O exemplo a seguir mostra o uso dos métodos da classe java.util.regex.Pattern.PatternSyntaxException.

package com.tutorialspoint;

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

public class PatternSyntaxExceptionDemo {
   private static String REGEX = "[";
   private static String INPUT = "The dog says meow " + "All dogs say meow.";
   private static String REPLACE = "cat";

   public static void main(String[] args) {
      try{
         Pattern pattern = Pattern.compile(REGEX);
         
         // get a matcher object
         Matcher matcher = pattern.matcher(INPUT); 
         INPUT = matcher.replaceAll(REPLACE);
      } catch(PatternSyntaxException e){
         System.out.println("PatternSyntaxException: ");
         System.out.println("Description: "+ e.getDescription());
         System.out.println("Index: "+ e.getIndex());
         System.out.println("Message: "+ e.getMessage());
         System.out.println("Pattern: "+ e.getPattern());
      }
   }
}

Vamos compilar e executar o programa acima, isso produzirá o seguinte resultado -

PatternSyntaxException: 
Description: Unclosed character class
Index: 0
Message: Unclosed character class near index 0
[
^
Pattern: [

A seguir estão vários exemplos de caracteres correspondentes usando expressões regulares em java.

Sr. Não Construir e combinar
1 x

O personagem x

2 \\

O caractere barra invertida

3 \ 0n

O caractere com valor octal 0n (0 ≤ n ≤ 7)

4 \ 0nn

O caractere com valor octal 0nn (0 ≤ n ≤ 7)

5 \ 0mnn

O caractere com valor octal 0mnn (0 ≤ m ≤ 3, 0 ≤ n ≤ 7)

6 \ xhh

O caractere com valor hexadecimal 0xhh

7 \ uhhhh

O caractere com valor hexadecimal 0xhhhh

8 \ t

O caractere de tabulação ('\ u0009')

9 \ n

O caractere de nova linha (alimentação de linha) ('\ u000A')

10 \ r

O caractere de retorno de carro ('\ u000D')

11 \ f

O caractere de avanço de formulário ('\ u000C')

A seguir estão vários exemplos de classes de caracteres correspondentes usando expressões regulares em java.

Sr. Não Construir e combinar
1 [abc]

a, b ou c (classe simples).

2 [^ abc]

Qualquer caractere, exceto a, b ou c (negação).

3 [a-zA-Z]

a a z ou A a Z, inclusive (intervalo).

4 [ad [mp]]

a a d, ou m a p: [a-dm-p] (união).

5 [az && [def]]

d, e ou f (interseção).

6 [az && [^ bc]]

a a z, exceto para b e c: [ad-z] (subtração)

7 [az && [^ mp]]

a a z, e não m a p: [a-lq-z] (subtração).

A seguir estão vários exemplos de correspondência de classes de caracteres predefinidas usando expressões regulares em java.

Sr. Não Construir e combinar
1 .

Qualquer caractere (pode ou não corresponder aos terminadores de linha).

2 \ d

Um dígito: [0-9].

3 \ D

Um não dígito: [^ 0-9].

4 \ s

Um caractere de espaço em branco: [\ t \ n \ x0B \ f \ r]

5 \ S

Um caractere diferente de espaço em branco: [^ \ s].

6 \W

Um caractere de palavra: [a-zA-Z_0-9].

7 \W

Um caractere diferente de palavra: [^ \ w]

A seguir estão vários exemplos de correspondência de classes de caracteres POSIX usando expressões regulares em java.

Sr. Não Construir e combinar
1 \ p {inferior}

Um caractere alfabético minúsculo: [az].

2 \ p {superior}

Um caractere alfabético maiúsculo: [AZ].

3 \ p {ASCII}

Todos ASCII: [\ x00- \ x7F].

4 \ p {Alpha}

Um caractere alfabético: [\ p {Inferior} \ p {Superior}].

5 \ p {dígito}

Um dígito decimal: [0-9].

6 \ p {Alnum}

Um caractere alfanumérico: [\ p {Alpha} \ p {Digit}].

7 \ p {Punct}

Pontuação: um de! "# $% & '() * +, -. / :; <=>? @ [\] ^ _> {|} <.

8 \ p {gráfico}

Um caractere visível: [\ p {Alnum} \ p {Punct}].

9 \ p {Imprimir}

Um caractere imprimível: [\ p {Gráfico} \ x20].

10 \ p {em branco}

Um espaço ou uma guia: [\ t].

11 \ p {XDigit}

Um dígito hexadecimal: [0-9a-fA-F].

12 \ p {espaço}

Um caractere de espaço em branco: [\ t \ n \ x0B \ f \ r].

A seguir estão vários exemplos de correspondência de classes de caracteres JAVA usando expressões regulares em java.

Sr. Não Construir e combinar
1 \ p {javaLowerCase}

Equivalente a java.lang.Character.isLowerCase ().

2 \ p {javaUpperCase}

Equivalente a java.lang.Character.isUpperCase ().

3 \ p {javaWhitespace}

Equivalente a java.lang.Character.isWhitespace ().

4 \ p {javaMirrored}

Equivalente a java.lang.Character.isMirrored ().

A seguir estão vários exemplos de correspondência de classes de caracteres Unicode usando expressões regulares em java.

Sr. Não Construir e combinar
1 \ p {IsLatin}

Um personagem de escrita latina.

2 \ p {InGreek}

Um personagem do bloco grego.

3 \ p {Lu}

Uma letra maiúscula.

4 \ p {IsAlfabético}

Um caractere alfabético (propriedade binária).

5 \ p {Sc}

Um símbolo de moeda.

6 \ P {InGreek}

Qualquer personagem, exceto um no bloco grego.

7 [\ p {L} && [^ \ p {Lu}]]

Qualquer letra, exceto maiúsculas.

A seguir estão vários exemplos de Boundary Matchers usando expressões regulares em java.

Sr. Não Construir e combinar
1 ^

O início de uma linha.

2 $

O fim de uma linha.

3 \ b

Um limite de palavra.

4 \ B

Um limite sem palavras.

5 \UMA

O início da entrada.

6 \ G

O final da partida anterior.

7 \ Z

O fim da entrada, mas para o terminador final, se houver.

8 \ z

O fim da entrada.

Um quantificador ganancioso indica ao mecanismo de pesquisa para pesquisar a string inteira e verificar se ela corresponde ao regexp fornecido. A seguir estão vários exemplos de Quantificadores Greedy usando expressão regular em java.

Sr. Não Construir e combinar
1 X?

X, uma vez ou não.

2 X *

X, zero ou mais vezes

3 X +

X, uma ou mais vezes.

4 X {n}

X, exatamente n vezes.

5 X {n,}

X, pelo menos n vezes.

6 X {n, m}

X, pelo menos n, mas não mais do que m vezes

Um quantificador relutante indica que o mecanismo de busca deve começar com o menor pedaço possível da string. Uma vez encontrada a correspondência, o motor continua; caso contrário, adiciona um caractere à seção da string que está sendo verificada e pesquisa isso, e assim por diante. Este processo segue até encontrar uma correspondência ou toda a string se esgotar. A seguir estão vários exemplos de Quantificadores Relutantes usando expressão regular em java.

Sr. Não Construir e combinar
1 X ??

X, uma vez ou não.

2 X *?

X, zero ou mais vezes

3 X +?

X, uma ou mais vezes.

4 X {n}?

X, exatamente n vezes.

5 X {n,}?

X, pelo menos n vezes.

6 X {n, m}?

X, pelo menos n, mas não mais do que m vezes

Um quantificador possessivo é semelhante ao quantificador ganancioso. Indica que o motor deve ligar verificando toda a string. É diferente no sentido se não funcionar, se a correspondência falhou e não há como voltar atrás. A seguir estão vários exemplos de Quantificadores possessivos usando expressão regular em java.

Sr. Não Construir e combinar
1 X? +

X, uma vez ou não.

2 X * +

X, zero ou mais vezes

3 X ++

X, uma ou mais vezes.

4 X {n} +

X, exatamente n vezes.

5 X {n,} +

X, pelo menos n vezes.

6 X {n, m} +

X, pelo menos n, mas não mais do que m vezes

A seguir estão vários exemplos de operadores lógicos usando expressões regulares em java.

Sr. Não Construir e combinar
1 XY

X seguido por Y.

2 X | Y

X ou Y.

Impressão