Venha expressar regulamente conosco?
Tags: regex, programming, codequality, conceito
Published: 2021-11-08 12:48:28

Olá galera, voltando com mais um diário de bordo, hoje iremos transcrever, explicar e demostrar como funciona um regex, e como em todos os artigos que eu faço, deixarei um exemplo prático em python de como se utilizar.

![What is regex?](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rd6v3kjdkb8h9ce92k6l.jpg)

## O que é uma expressão regular?

De acordo com [Alexandre Servian](https://medium.com/xp-inc/regex-um-guia-pratico-para-express%C3%B5es-regulares-1ac5fa4dd39f) diz "Uma expressão regular é um método formal de se especificar um padrão de texto.", no artigo dele, ele retrata que com ela pode lidar com algumas situações como: 

* Procura
* Substituição
* Validação de formatos
* Filtragem de informações

## Regex, na prática

Vamos criar nosso primeiro exemplo, com isso usaremos algo fácil e padrão, para você poder implementar em qualquer linguagem, o que muda é a forma que você chama a lib ou se é com um construtor ou não entre outros.

O Regex que vamos criar é para validação de CPF ou CNPJ, irei demostrar o regex pronto e logo em seguida explicarei parte por parte dele.

Esta solução valida estes formatos:

```
CPF - 00000000000
CNPJ - 00000000000000
CPF - 000.000.000-00
CNPJ - 00.000.000/0000-00
CPF - 000000000-00
CNPJ - 00000000/0000-00,
``` 

Por exemplo. Os pontos e traços são opcionais em cada uma das posições.

O que não é aceito, por exemplo: 000-000-000-00 (mas pode ser alterado conforme nota abaixo)

####Exemplo:
```
([0-9]{2}[\.]?[0-9]{3}[\.]?[0-9]{3}[\/]?[0-9]{4}[-]?[0-9]{2})|([0-9]{3}[\.]?[0-9]{3}[\.]?[0-9]{3}[-]?[0-9]{2})
```

####Explicação:

* [0-9]{2} Faixa de caracteres: 0 a 9, quantidade: 2 caracteres;
* [0-9]{3} Faixa de caracteres: 0 a 9, quantidade: 3 caracteres;
* [0-9]{4} Faixa de caracteres: 0 a 9, quantidade: 4 caracteres;
* [\.]?Um ponto, opcional. Foi usado \ no ponto, pois ele sozinho é caractere especial;
* [-]? Um traço, opcional (se acrescentar outros caracteres, comece pelo – sempre);
* [\/]? Uma barra, opcional. Tambem “escapada” com \ pra agradar o PCRE;
* (grupo1)|(grupo2) Se um dos grupos validar, a expressão é válida.

Caso queira aceitar outros separadores, basta acrescentar entre os [ ].

Exemplo: 

[-\.\/]? Vai aceitar tanto - quanto . e / naquela posição (? = ou nada).

Se quiser saber mais sobre o regex e quais outros caracteres especiais ele aceita, temos a [Documentação em JavaScript](https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Guide/Regular_Expressions) e a [Documentação em Python](https://docs.python.org/3/library/re.html)

Este foi o <b>diário de bordo #08</b> vamos nos despedindo por aqui. Voltaremos com mais um diário de bordo.

<p align="center">
  <a href="#">
    <img src="https://cdn.dribbble.com/users/1889486/screenshots/5081642/thankyou_.gif" width="500">
  </a>
</p>

<b>Este artigo foi útil para você?</b> 
<b>Deixe um comentário abaixo.</b>

## Referências 

* [Regex: Um guia prático para expressões regulares](https://medium.com/xp-inc/regex-um-guia-pratico-para-express%C3%B5es-regulares-1ac5fa4dd39f)

* [Expressões Regulares - JavaScript](https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Guide/Regular_Expressions)

* [re - Regular Expression Operations](https://docs.python.org/3/library/re.html)