Seja um desenvolvedor regular – adicionando expressões regulares no seu dia a dia
As expressões regulares são formadas por metacaracteres que, de acordo com a sua funcionalidade, dão mais poder às pesquisas.
Este artigo foi publicado no equinociOS, promovido pelo Cocoaheads-Br.
O que são expressões regulares
Expressão regular, vulgo regex, é um padrão de caractere que tem como objetivo identificar em uma string um padrão definido. Esse padrão pode ser palavras, caracteres específicos, números e expressões. Imagine o conjunto de palavras {sossego, prato, assadura, casa, passas} e você precisa separar todas as palavras que possuem ss. A primeira coisa que vem à mente é verificar palavra por palavra e checar se essa palavra contém ss. Com expressões regulares, você define um padrão e utiliza esse padrão para buscar as palavras que se encaixam nele. Se você for do tipo questionador, pode dizer: tá, mas isso eu faço com um if simples. Ok, concordo, mas e se quiser somente as palavras que contêm ss e que terminam com vogais (fica aí um exercício para quando terminar de ler o artigo)? É aí que entram as expressões regulares!
Como funcionam as expressões regulares
As expressões regulares são formadas por metacaracteres que, de acordo com a sua funcionalidade, dão mais poder às pesquisas. Elas formam padrões que, em alguns casos, são quase impossíveis de serem especificados utilizando caracteres comuns.
Os metacaracteres são divididos em 4 (quatro) grupos: Especificadores, Quantificadores, Âncoras e Agrupamento. Para facilitar o entendimento, segue abaixo uma tabela com cada caractere e sua funcionalidade, separados por grupos.
Especificadores
Especificam (daí o nome) um conjunto de caracteres a partir de uma posição.
| Metacaractere | Funcionalidade |
|---|---|
. |
Qualquer caractere. |
... |
Qualquer caractere incluído no conjunto. |
^... |
Qualquer caractere não incluído no conjunto. |
\d |
Qualquer caractere que seja um número (o mesmo que [0-9]). |
\D |
Qualquer caractere que não seja um número (o mesmo que [^0-9]). |
s |
Qualquer caractere branco (espaços, quebra de linha, tabs). |
S |
Qualquer caractere não branco. |
w |
Qualquer caractere alfa numérico. |
W |
Qualquer caractere não alfa numérico. |
\ |
Ignora o significado do próximo caractere na expressão. Ex.: Se quiser representar um . (ponto final), você utiliza \.. Dessa forma o . não vai representar qualquer caractere. |
Quantificadores
Definem o número de repetições permitidas pela expressão anterior.
| Metacaractere | Funcionalidade |
|---|---|
{n} |
Busca por exatamente n ocorrências. Ex.: A expressão \d{4} procura por um número de 4 dígitos. |
{n,m} |
Busca por um mínimo de n e um máximo de m ocorrências. |
{n,} |
Busca por no mínimo n ocorrências. |
{,n} |
Busca por no máximo n ocorrências. |
? |
Busca por 1 (uma) ou nenhuma ocorrência. |
+ |
Busca por 1 (uma) ou mais ocorrências. |
* |
Busca por 0 (zero) ou mais ocorrências. |
Âncoras
Definem as posições de referência para o match da expressão regular.
| Metacaractere | Funcionalidade |
|---|---|
^ |
Define a posição do início do texto ou de uma nova linha (em caso de textos multilinhas). |
\A |
Define a posição do início do texto. |
$ |
Define a posição do fim do texto ou de uma linha (em caso de textos multilinhas). |
Z |
Define a posição do fim do texto. |
b |
Define a posição de borda, ou seja, logo antes do início de uma palavra ou logo após o fim da palavra. |
B |
Define a posição de não borda. |
Agrupamento
Definem grupos.
| Metacaractere | Funcionalidade |
|---|---|
(...) |
Define um grupo para aplicação de um quantificador. |
...|... |
Define uma alternativa para a aplicação da expressão. A expressão deve dar match à direita ou à esquerda. |
\n |
Recupera um match no grupo n. |
Viu como as expressões são bem simples e, na maioria dos casos, os caracteres até fazem algum sentido?
Qual a vantagem das expressões regulares?
A grande vantagem de usar expressões regulares é poupar tempo. Elas são uma maneira simples de encontrar padrões. Você poderia escrever um if gigantesco e varrer cada caractere de uma string para validar o formato de um e-mail, por exemplo, ou pode usar um simples [A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,6}.
Onde usar expressões regulares
As aplicações regulares no dia a dia do desenvolvedor são muitas. Você pode aplicar expressões regulares desde o console de debug (sim, o Xcode te dá essa opção) até nas validações de formulários. Um caso bem comum de aplicação de expressões regulares é na validação de e-mails. Além de e-mails, inúmeros campos podem ser validados com expressões regulares: telefones, CEPs, senhas, nomes, endereços, número de cartões de crédito etc.
Como usar expressões regulares no iOS
Usar expressão regular no iOS é muito simples. Existe uma classe (NSRegularExpression) que pede no seu construtor a expressão e as opções que serão aplicadas no momento do match. Assim, caso você queira uma função para validar um campo CEP, por exemplo, pode fazer:
func validateZipCode(zipCode: String) -> Bool {
let regex = try! NSRegularExpression(pattern: "^[0-9]{2}[0-9]{3}-[0-9]{3}$", options: [.CaseInsensitive])
let regexResult = regex.firstMatchInString(zipCode, options:[], range: NSMakeRange(0, utf16.count)) != nil
if !regexResult {
return false
}
return true
}
Uma dica para você praticar é o site Regex Pal. Nele, é possível definir uma string e testar as suas expressões à vontade.
Se quiser, crie uma expressão para o exemplo dado na primeira seção do artigo e deixe nos comentários. Só não vale ler os comentários anteriores ;).








