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