8 expressões regulares que você deve conhecer

As expressões regulares são uma linguagem própria. Quando você aprende uma nova linguagem de programação, eles são essa pequena sublinguagem que não faz sentido à primeira vista. Muitas vezes você precisa ler outro tutorial, artigo ou livro apenas para entender o “simples” padrão descrito. Hoje, revisaremos oito expressões regulares que você deve conhecer para seu próximo projeto de codificação.

Antes de começarmos, você pode conferir alguns dos aplicativos regex no Envato Market, como o RegEx Extractor. Este poderoso script permite extrair e-mails, proxies, IPs, números de telefone, endereços, tags HTML, URLs, links, datas, etc. Basta inserir uma ou várias expressões regulares e URLs de origem e iniciar o processo.

Extraia, raspe, analise, colha.

Exemplos de uso

  • Extraia e-mails de um catálogo de endereços CSV antigo.
  • Extraia fontes de imagem de arquivos HTML.
  • Extraia proxies de sites online.
  • Extraia resultados de URL do Google.

Informações básicas sobre expressões regulares

Isto é o que a Wikipedia tem a dizer sobre eles:

Na computação, as expressões regulares fornecem um meio conciso e flexível para identificar sequências de texto de interesse, como caracteres, palavras ou padrões de caracteres específicos. Expressões regulares (abreviadas como regex ou regexp, com formas plurais regexes, regexps ou regexen) são escritas em uma linguagem formal que pode ser interpretada por um processador de expressão regular, um programa que serve como gerador de analisador ou examina texto e identifica partes que correspondam à especificação fornecida.

Agora, isso realmente não me diz muito sobre os padrões reais. As regexes que examinarei hoje contêm caracteres como w, s, 1 e muitos outros que representam algo totalmente diferente do que parecem.

Se você quiser aprender um pouco sobre expressões regulares antes de continuar lendo este artigo, sugiro assistir à série de screencast Expressões regulares para leigos.

As oito expressões regulares que veremos hoje permitirão que você corresponda a (n): nome de usuário, senha, email, valor hexadecimal (como #fff ou #000), slug, URL, endereço IP e uma tag HTML. À medida que a lista desce, as expressões regulares ficam cada vez mais confusas. As imagens para cada regex no início são fáceis de seguir, mas as quatro últimas são mais facilmente compreendidas lendo a explicação.

A principal coisa a lembrar sobre expressões regulares é que elas são quase lidas para frente e para trás ao mesmo tempo. Esta frase fará mais sentido quando falarmos sobre a correspondência de tags HTML.

Observação: Os delimitadores usados ​​nas expressões regulares são barras, “/”. Cada padrão começa e termina com um delimitador. Se uma barra aparecer em uma regex, devemos escapar dela com uma barra invertida: “/”.


1. Correspondendo a um nome de usuário

Padrão:

Descrição:

Começamos dizendo ao analisador para encontrar o início da string (^), seguido por qualquer letra minúscula (az), número (0-9), sublinhado ou hífen. Em seguida, {3,16} garante que sejam pelo menos 3 desses caracteres, mas não mais que 16. Por fim, queremos o final da string ($).

String que corresponde:

meu-us3r_n4m3

String que não corresponde:

th1s1s-wayt00_l0ngt0beusername (muito longo)


2. Correspondendo a uma senha

Padrão:

Descrição:

A correspondência de uma senha é muito semelhante à correspondência de um nome de usuário. A única diferença é que, em vez de 3 a 16 letras, números, sublinhados ou hífens, queremos de 6 a 18 deles ({6,18}).

String que corresponde:

myp4ssw0rd

String que não corresponde:

mypa$$w0rd (contém um cifrão)


3. Correspondendo a um valor hexadecimal

Padrão:

Descrição:

Começamos dizendo ao analisador para encontrar o início da string (^). Em seguida, um sinal de número é opcional porque é seguido por um ponto de interrogação. O ponto de interrogação informa ao analisador que o caractere anterior – neste caso, um sinal de número – é opcional, mas deve ser “ambicioso” e capturá-lo se estiver lá. A seguir, dentro do primeiro grupo (primeiro grupo de parênteses), podemos ter duas situações diferentes. A primeira é qualquer letra minúscula entre a e f ou um número seis vezes. A barra vertical nos diz que também podemos ter três letras minúsculas entre a e f ou números. Finalmente, queremos o final da string ($).

A razão pela qual coloquei os seis caracteres antes é que o analisador capturará um valor hexadecimal como #ffffff. Se eu tivesse invertido para que os três caracteres viessem primeiro, o analisador só pegaria #fff e não os outros três f’s.

String que corresponde:

#a3c113

String que não corresponde:

#4d82h4 (contém a letra h)


4. Combinando com uma lesma

Padrão:

Descrição:

Você usará este regex se precisar trabalhar com mod_rewrite e URLs bonitas. Começamos dizendo ao analisador para encontrar o início da string (^), seguido por uma ou mais letras, números ou hífens (o sinal de mais). Finalmente, queremos o final da string ($).

String que corresponde:

meu-título-aqui

String que não corresponde:

my_title_here (contém sublinhados)


5. Correspondência de um e-mail

Padrão:

Descrição:

Começamos dizendo ao analisador para encontrar o início da string (^). Dentro do primeiro grupo, combinamos uma ou mais letras minúsculas, números, sublinhados, pontos ou hífens. Eu escapei do ponto porque um ponto sem escape significa qualquer caractere. Logo depois disso, deve haver um sinal de arroba. Em seguida é o nome de domínio que deve ser: uma ou mais letras minúsculas, números, sublinhados, pontos ou hífens. Em seguida, outro ponto (escapado), com a extensão sendo de duas a seis letras ou pontos. Eu tenho 2 a 6 por causa dos TLDs específicos do país (.ny.us ou .co.uk). Finalmente, queremos o final da string ($).

String que corresponde:

[email protected]

String que não corresponde:

[email protected] (TLD é muito longo)


6. Correspondência de um URL

Padrão:

Descrição:

Este regex é quase como pegar a parte final do regex acima, batendo-o entre “http://” e alguma estrutura de arquivo no final. Parece muito mais simples do que realmente é. Para começar, procuramos o início da linha com o acento circunflexo.

O primeiro grupo de captura é todo opcional. Ele permite que o URL comece com “http://”, “https://”, ou nenhum deles. Eu tenho um ponto de interrogação após o s para permitir URLs que tenham http ou https. Para tornar todo este grupo opcional, acabei de adicionar um ponto de interrogação ao final.

Em seguida vem o nome de domínio: um ou mais números, letras, pontos ou hífens seguidos por outro ponto e depois duas a seis letras ou pontos. A seção a seguir são os arquivos e diretórios opcionais. Dentro do grupo, queremos corresponder a qualquer número de barras, letras, números, sublinhados, espaços, pontos ou hífens. Então dizemos que esse grupo pode ser combinado quantas vezes quisermos. Praticamente isso permite que vários diretórios sejam combinados junto com um arquivo no final. Eu usei a estrela em vez do ponto de interrogação porque a estrela diz zero ou maisnão zero ou um. Se um ponto de interrogação fosse usado lá, apenas um arquivo/diretório poderia ser correspondido.

Em seguida, uma barra final é correspondida, mas pode ser opcional. Finalmente terminamos com o fim da linha.

String que corresponde:

https://tutsplus.com/about

String que não corresponde:

http://google.com/some/file!.html (contém um ponto de exclamação)


7. Correspondência de um endereço IP

Padrão:

Descrição:

Agora, não vou mentir, não escrevi essa regex; Eu peguei daqui. Agora, isso não significa que eu não possa rasgá-lo personagem por personagem.

O primeiro grupo de captura realmente não é um grupo capturado porque

foi colocado dentro que diz ao analisador para não capturar este grupo (mais sobre isso na última regex). Também queremos que esse grupo não capturado seja repetido três vezes — o {3} no final do grupo. Este grupo contém outro grupo, um subgrupo e um ponto literal. O analisador procura uma correspondência no subgrupo e depois um ponto para seguir em frente.

O subgrupo também é outro grupo sem captura. É apenas um monte de conjuntos de caracteres (coisas entre colchetes): a string “25” seguido de um número entre 0 e 5; ou a corda “2” e um número entre 0 e 4 e qualquer número; ou um zero ou um opcional seguido de dois números, sendo o segundo opcional.

Depois de combinarmos três deles, é para o próximo grupo sem captura. Este quer: a corda “25” seguido de um número entre 0 e 5; ou a corda “2” com um número entre 0 e 4 e outro número no final; ou um zero ou um opcional seguido de dois números, sendo o segundo opcional.

Terminamos essa regex confusa com o final da string.

String que corresponde:

73.60.124.136 (não, esse não é meu endereço IP :P)

String que não corresponde:

256.60.124.136 (o primeiro grupo deve ser “25” e um número entre zero e cinco)


8. Correspondendo a uma tag HTML

Padrão:

Descrição:

Um dos regexes mais úteis da lista. Ele corresponde a qualquer tag HTML com o conteúdo interno. Como de costume, começamos com o início da linha.

Primeiro vem o nome da tag. Deve ter uma ou mais letras. Este é o primeiro grupo de captura, é útil quando temos que pegar a tag de fechamento. A próxima coisa são os atributos da tag. Este é qualquer caractere, exceto um sinal de maior que (>). Como isso é opcional, mas quero combinar mais de um caractere, a estrela é usada. O sinal de mais compõe o atributo e o valor, e a estrela diz quantos atributos você quiser.

Em seguida vem o terceiro grupo de não captura. Dentro, ele conterá um sinal de maior que, algum conteúdo e uma marca de fechamento; ou alguns espaços, uma barra e um sinal de maior que. A primeira opção procura um sinal de maior que seguido por qualquer número de caracteres e a tag de fechamento. 1 é usado para representar o conteúdo que foi capturado no primeiro grupo de captura. Neste caso foi o nome da tag. Agora, se isso não puder ser correspondido, queremos procurar uma tag de fechamento automático (como uma tag img, br ou hr). Isso precisa ter um ou mais espaços seguidos por “/>”.

A regex termina com o fim da linha.

String que corresponde:

Nettuts”>https://code.tutsplus.com”>Nettuts+

String que não corresponde:

Minha imagem>” /> (atributos não podem conter sinais maiores que)</p>
<hr/>
<h2>Conclusão</h2>
<p>Espero que você tenha entendido um pouco melhor as ideias por trás das expressões regulares.  Espero que você use esses regexes em projetos futuros!  Muitas vezes você não precisará decifrar um caractere regex por caractere, mas às vezes, se você fizer isso, ajudará a aprender.  Apenas lembre-se, não tenha medo de expressões regulares, elas podem não parecer, mas tornam sua vida muito mais fácil.  Apenas tente extrair o nome de uma tag de uma string sem expressões regulares!</p>
<p>Siga-nos no <a href=Twitter, ou assine o NETTUTS RSS Feed para mais tutoriais e artigos diários de desenvolvimento web. E confira alguns desses aplicativos regex no Envato Market.



Deixe uma resposta