Trabalho com expressões regulares em Java

Índice
Nos sistemas de informação de hoje, é normal ver as funções de pesquisa, essas funções sempre precisam ser processadas padrões de muitos mais complexos. Para poder considerar cada caso em particular, seriam necessários alguns milhares de anos, razão pela qual foram desenvolvidos mecanismos que permitem estabelecer uma representação formulada das pesquisas.
Essas fórmulas podem ser encontradas no expressões regulares, que nos permitem estabelecer padrões de avaliação de strings de texto e devolver um valor positivo ou negativo se tal string corresponder ou não à fórmula expressa.
Em Java Podemos implementar expressões regulares de forma simples, mas isso requer um estudo bastante extenso por parte do desenvolvedor para que ele possa aprender os diferentes elementos que possui.
A maneira pela qual podemos expressar as fórmulas com as quais podemos testar nossos padrões com uma construção de código particular, vamos chamar isso de sintaxe de expressão regular.
O que a sintaxe nos permite?O que a sintaxe nos permite é estabelecer padrões por tipo de caractere, quantidade, combinação de caractere e quantidades, comece com um elemento particular, defina uma expressão para o centro da fórmula e um fim. Com isso podemos identificar padrões muito específicos que podem ser necessários em nosso programa ou talvez filtrar de forma mais adequada uma busca em um texto ou banco de dados.
Vamos ver abaixo uma pequena lista dos elementos mais usados ​​em expressões regulares com Java, há muito mais elementos do que os mostrados neste tutorial, portanto, é recomendável fazer sua própria pesquisa para reforçar o conhecimento:
Início da linha\^ Com este elemento passamos a indicar Java que inicia uma linha na expressão regular.
Fim da linha$ Com este símbolo, indicamos que terminamos a linha.
Lista de Personagens[] Com colchetes, indicamos à expressão regular que ela deve pesquisar qualquer uma das listas dentro.
Excluir[\^] Ele nos permite selecionar qualquer personagem que não esteja listado.
Quantificador{j, k} Localize o que está em j o número de vezes indicado k; {j,} neste segundo caso, tudo o que está em j uma ou mais vezes; por último {j} indica que o que está em deve aparecer j apenas uma vez.
Caracteres de palavras\ C Localize os personagens que pertencem a palavra, mas se usarmos \ C ele faz o oposto localiza personagens que não pertencem.
Dígitos\ d Permite-nos fazer correspondências apenas com dígitos e, se usarmos \ D corresponderemos a qualquer coisa que não seja um dígito ou caractere numérico.
Espaços em branco\ s Ele nos permite combinar espaços em branco, como tabulações, barra de espaço, mas se usarmos \ S faz o oposto, ele corresponde a tudo que não seja espaço em branco.
Como podemos ver com esses poucos elementos, podemos construir várias combinações com as quais podemos obter padrões relativamente complexos.
Se quisermos experimentar um frase regular Antes de compilar um programa, podemos usar a página rubular.com onde podemos avaliar os padrões em tempo real.

PROLONGAR

Vamos realizar um exemplo simples, onde vamos testar um expressão regular para validar um e-mail, usaremos o seguinte:
[_ a-z0-9 -] + (\. [_ a-z0-9 -] +) * @ [a-z0-9 -] + (\. [a-z0-9 -] +) * (\. [az] {2,3}) $

Primeiro, devemos inserir a expressão regular no primeiro campo do formulário da página de rubular.com então no campo chamado sua string de teste é onde vamos testar diferentes e-mails para verificar se o regex está funcionando, vamos ver como o validador se comporta quando inserimos um e-mail inválido:

PROLONGAR

Como podemos ver, nosso e-mail de exemplo está sem o ponto, portanto é inválido e não não gera correspondência Com a expressão regular, vamos corrigi-la colocando o ponto que falta e o validador gera automaticamente uma resposta positiva permitindo-nos ver que a nossa expressão regular funciona sem problemas.

PROLONGAR

Como podemos ver, este é um recurso muito útil quando estamos aprendendo a usar expressões regulares não apenas em Java se não em qualquer idioma.
Uma vez que sabemos o que cada um dos elementos básicos da sintaxe faz, agora devemos aprender como podemos fazer um procure um padrão Dentro de Java, com isso podemos ver quais métodos, classes e pacotes entram em jogo quando usamos expressões regulares.
A primeira coisa que devemos saber é que todos esses utilitários estão no pacote java.util.regex, então, para fazer esses exemplos, devemos incluir este pacote no início de nossas classes.
Assim que o acima for feito, podemos testar um padrão da seguinte maneira:
 if (ourString.matches (ourExpression)) {// Se corresponder aqui, executamos um código} 

Vemos que usamos o método fósforos (), isso irá avaliar a string de caracteres em relação ao padrão regex e retornar verdadeiro ou falso, caso a sequência de caracteres corresponda ao padrão ou não.
Este tipo de uso é adequado em pequenas validações, porém se formos utilizar uma validação recorrente, ou seja, ela aparecerá muitas vezes em nosso programa, é melhor fazer uma pequena rotina ou classe que nos permita avaliar a string de forma paramétrica, ou seja, uma rotina ou método que permite inserir uma string e retornar verdadeiro ou falso, já comparando com um determinado padrão.
No programa a seguir, vamos testar um pequeno padrão e avaliá-lo em relação a algumas strings e o programa nos dirá qual é. partida, ou seja, qual corresponde e qual não, vamos ver o código e então veremos como funciona:
 import java.util.regex. *; public class TestPatterns {public static void main (String [] argv) {String pattern = "Q [u] \ d + \."; String [] input = {"QA777. É o identificador do nosso produto.", "Quack, Quack, Quack!" }; Padrão p = Padrão.compile (padrão); for (String em: input) {boolean found = p.matcher (in) .lookingAt (); System.out.println ("'" + padrão + "'" + (encontrado? "Corresponde a '": "não corresponde a'") + in + "'"); }}} 

Aqui vemos como a primeira coisa que fazemos é importar o pacote mencionado no início desta seção, para obtermos desta forma as funcionalidades da busca por expressões regulares. Então construímos um padrão que usaremos é o nosso programa, neste caso é um padrão que corresponde à letra “Q"Então deve ter qualquer caractere exceto a letra"ou”E deve terminar com um ponto final. Em seguida, compilamos nosso padrão usando o método compilar e podemos usá-lo para fazer as correspondências. Finalmente, se o padrão corresponder, ele será impresso com a palavra partida caso contrário, nós imprimimos não coincide.
Vamos ver na imagem a seguir como isso fica quando executamos o programa:

PROLONGAR

Em seguida, observamos, como explicado, a primeira string ou cadeia se ela corresponde, mas a segunda não, e para referência futura, colocamos o padrão no qual a comparação deve ser feita.
Vamos agora realizar um exemplo mais avançado, vamos identificar qual parte de nossa string corresponde, isso é muito útil quando estamos fazendo buscas de texto, pois com isso poderíamos destacar as correspondências do que o usuário entra.
Para isso vamos usar a mesma base do nosso programa anterior com algumas modificações, vamos ver o código e depois a explicação dele:
 import java.util.regex. *; public class Match {public static void main (String [] argv) {String pattern = "Q [u] \ d + \."; Padrão r = Padrão.compile (padrão); String text = "O id é: QW990. Fim do teste!"; Matcher m = r.matcher (texto); if (m.find ()) {System.out.println (padrão + "corresponde a \" "+ m.group (0) +" \ "dentro de \" "+ texto +" \ ""); } else {System.out.println ("Nenhuma correspondência"); }}} 

Mais uma vez, vemos como iniciamos nosso programa incluindo o pacote java.util.regex. *. Então usamos o mesmo padrão do programa anterior e o compilamos com o método compilar, o interessante vem agora, usamos o método matcher () para localizar a correspondência e, em seguida, com o método encontrar () e o método grupo () podemos extrair exatamente o que corresponde, finalmente fazemos as impressões de tela correspondentes. Vamos ver como é o nosso programa agora:

PROLONGAR

Assim, vemos então como fomos capazes de isolar a palavra que realmente corresponde ao padrão que organizamos para a comparação do frase regular.
Um dos aplicativos mais usados ​​está no formulários, onde podemos fazer validações de e-mails, números de telefone, cartões de crédito, senhas, endereços IP, nomes de usuário, códigos postais e ainda validar se todas as nossas tags em nosso documento HTML estão corretamente fechadas, dando-nos a possibilidade de obtermos maior segurança no processamento do texto inserido pelos usuários.
Mas não apenas em validações em campos de um formulário, como notamos em nosso último exemplo, também podemos fazer pesquisas de texto longo Por um padrão particular, com ele podemos pesquisar em documentos de texto muito complexos de uma forma sistemática e, assim, economizar muito tempo, simplesmente escrevendo um pequeno programa.
Com isso terminamos este tutorial, aprendemos como podemos ir de ter diferentes elementos para expressar situações dentro de nossos padrões para efetivamente fazer as comparações correspondentes do texto ou caracteres que queremos avaliar, tudo isso graças ao expressões regulares. Essas avaliações são bastante rápidas graças às otimizações que a linguagem faz nos métodos que nos oferece, por isso são muito adequadas para a construção de interfaces onde precisamos buscar e validar o texto que o usuário digita.Gostou e ajudou este tutorial?Você pode recompensar o autor pressionando este botão para dar a ele um ponto positivo
wave wave wave wave wave