Uma expressão regular é um tipo de padrão que pode ser aplicado a texto (String, em Java). Java fornece o pacote
java.util.regex para correspondência de expressões regulares. As expressões regulares são muito semelhantes à linguagem de programação Perl e são muito fáceis de aprender. Uma expressão regular corresponde ao texto (parte dele) ou não. * Se uma expressão regular corresponder a um trecho de texto, poderemos encontrá-la. ** Se a expressão regular for composta, podemos descobrir facilmente qual parte da expressão regular corresponde a qual parte do texto.
Primeiro exemplo
A expressão regular "
[a-z] +
" corresponde a todas as letras minúsculas do texto.
[a-z]
significa qualquer caractere de
a
até
z
inclusive e
+
significa "um ou mais" caracteres. Vamos supor que fornecemos a string "code 2 learn java tutorial". Como fazer isso em Java Primeiro, você deve criar um modelo:
import java.util.regex.*;
Pattern p = Pattern.compile(“[a-z]+”);
Em seguida você deve criar
matcher
para o texto enviando uma mensagem no diagrama:
Matcher m = p.matcher(“code 2 learn java tutorial”);
NOTA: Nenhum deles possui construtores
Pattern
,
Matcher
nós os criamos usando métodos de classe
Pattern
.
Pattern Class:
O objeto de classe constitui uma representação de uma expressão regular. A classe Pattern não fornece nenhum construtor público. Para criar um modelo, você deve primeiro chamar um dos métodos estáticos públicos, que então retorna um objeto da classe
Pattern
. Esses métodos usam uma expressão regular como argumento.
Matcher Class:
O objeto Finder é um mecanismo que interpreta o padrão e executa operações de correspondência na string de entrada. Como
Pattern
uma classe,
Matcher
não possui construtores públicos. Você obtém um objeto
Matcher
chamando um método
matcher
em uma classe object
Pattern
. Depois de concluir essas etapas e agora termos uma instância da classe
Matcher m
, podemos verificar se o padrão foi encontrado ou não e, em caso afirmativo, em que posição, etc.
m.matches()
retorna verdadeiro se o padrão corresponder à string inteira, caso contrário, falso.
m.lookingAt()
retorna verdadeiro se o padrão corresponder ao início da string; caso contrário, retorna falso.
m.find ()
retorna verdadeiro se o padrão corresponder a qualquer parte do texto.
Encontrando uma correspondência
Após uma correspondência bem-sucedida,
m.start() retornará o índice do primeiro caractere correspondido e
m.end() retornará o índice do último caractere correspondido, mais um. Se uma tentativa mal sucedida foi feita e nenhuma correspondência foi encontrada,
m.start()
eles
m.end()
lançarão
IllegalStateException
- Isso é
RuntimeException
para que você não precise pegá-lo.
Pode parecer estranho
m.end()
retornar o índice do último caractere correspondente mais um, mas é exatamente isso que a maioria dos arquivos
String
.
- Por exemplo,
“Now is the time“.substring(m.start(), m.end())
retornará a mesma string. Vamos dar uma olhada no código:
import java.util.regex.*;
public class RegexTest {
public static void main(String args[]) {
String pattern = "[a-z]+";
String text = "code 2 learn java tutorial";
Pattern p = Pattern.compile(pattern);
Matcher m = p.matcher(text);
while(m.find()) {
System.out.print(text.substring(m.start(), m.end()) + "*");
}
}
}
Output: code*learn*java*tutorial*
Métodos Adicionais
Se houver uma correspondência, então:
m.replaceFirst(replacement)
retorna uma nova string, onde a primeira substring que corresponde ao padrão será substituída porreplacement
m.replaceAll(replacement)
retorna uma nova string, onde cada substring que corresponde ao padrão será substituída
m.find(StartIndex)
encontre a próxima correspondência começando no índice especificado
m.reset()
redefine o modelo
m.reset(NewText)
redefine o localizador e fornece um novo texto (talvez String
, StringBuffer
ou CharBuffer
)
Sintaxe de expressão regular
^
Corresponde ao início de uma linha.
$
Corresponde ao final da string.
.
Corresponde a qualquer caractere único, exceto nova linha. Usar a opção m permite corresponder a uma nova linha.
[...]
Corresponde a qualquer caractere único entre parênteses.
[^ ...]
Corresponde a qualquer caractere único que não esteja entre parênteses.
\A
Comece a linha inteira.
\z
Fim de linha inteira.
\Z
O fim de toda a linha, exceto o terminador de linha final.
re*
Corresponde a 0 ou mais ocorrências da expressão anterior.
re+
Uma ou mais correspondências da expressão anterior.
re?
Corresponde 0 ou 1 ao local da expressão anterior.
re{n}
Corresponde exatamente a N O número de ocorrências da expressão anterior.
re{n,}
Corresponde a N ou mais ocorrências da expressão anterior.
re{n, m}
Corresponde a pelo menos n e no máximo m ocorrências da expressão anterior.
a|b
Corresponde a a ou b.
(re)
Um grupo de expressões regulares e lembrando o texto encontrado.
(?: re)
Grupos de expressões regulares que não lembram o texto encontrado.
(?> re)
Corresponde a um padrão independente sem retorno.
\w
Corresponde letras e números [a-zA-Z_0-9].
\W
Estas não são letras ou números.
\s
Corresponde aos espaços. Equivalente a [\t\n\r\f].
\S
Não são caracteres de espaço em branco.
\d
Corresponde aos números. Equivalente a [0-9].
\D
Não corresponde aos números.
\G
Corresponde ao ponto da última partida.
\n
Corresponde à nova linha.
\b
Corresponde em um limite de palavra.
\B
Corresponde fora de um limite de palavra.
\n, \t, etc.
Caracteres de nova linha, retorno de carro, tabulação, etc.
\Q
Cite todos os caracteres antes de \E.
\E
A citação iniciada com \Q termina.
GO TO FULL VERSION