Neste
artigo, vamos tratar de um assunto muito interessante e de suma importância
que facilita a vida do desenvolvedor, seja de PHP, ASP. NET, Java, C,
Perl, VB, entre outros.
Uma expressão regular na área da informática define um padrão a
ser usado para procurar ou substituir palavras, ou grupos de palavras. É um meio
preciso de se fazer buscas de determinadas porções de texto. Por exemplo, se o conjunto de palavras for {asa, carro,
jardim, ovos, terra} e a expressão regular buscar por um padrão rr, obterá as
palavras carro e terra.
Existem diferentes formatos para definir expressões
regulares, porém com algumas noções gerais é possível entender boa parte delas.
Expressões Regulares. Um assunto que muitos torcem o nariz
ao ouvir falar, mas que sempre acaba aparecendo na resolução dos mais diversos
problemas. Para quem não conhece ou não domina o assunto, é difícil perceber a
utilidade de saber escrever todos aqueles símbolos estranhos. Mas à medida que
se vai aprendendo, aplicando, tudo começa a clarear.
Expressões Regulares é uma forma avançada de mexer com
strings. Ela permite que você crie condições para que um trecho seja
encontrado, substituído ou uma string separada em uma array. Você pode decidir
substituir um BBCode em tags HTML, mas não antes de verificar se os dados dessa
BBCode correspondem ao que você deseja, por exemplo. Exemplificando mais ainda,
você pode verificar se o texto contido em uma BBCode img é uma URL apontando
para uma imagem, por exemplo. Você pode definir para caso o usuário poste mais
de 3 pontos de exclamação, então esses pontos de exclamação são retirados até
ter somente 3. Como se pode perceber, a utilidade do RegExp é apenas limitada
pela sua imaginação. (Fonte: Wikipédia)
As ERs são úteis para buscar, ou validar textos variáveis,
como:
- data
- horário
- número IP
- endereço de e-mail
- endereço de Internet (url)
- declaração de uma função()
- dados na coluna N de um texto
- dados que estão entre <tags></tags>
- número de telefone, RG, CPF, cartão de crédito
Como funcionam?
Os metacaracteres
Para saber como funcionam as expressões regulares, precisamos
primeiro conhecer os metacaracteres. Cada metacaractere é uma ferramenta que
tem uma função específica. Eles servem para dar mais poder às pesquisas,
formando padrões e posições impossíveis de se especificar usando somente
caracteres normais.
Os metacaracteres são pequenos pedaços simples que
agrupados entre si, ou com caracteres normais, formam algo maior, uma
expressão. O importante é compreender bem cada um individualmente, e depois
apenas lê&#8722;los em sequência.
Para matar a curiosidade, aqui estão os tão falados
metacaracteres: . ? * + ^ $ | [ ] { } ( ) . Temos que nos acostumar com esses
símbolos e seus respectivos nomes, então vai uma tabela com a meta e o
mnemônico (nome).
metas | mnemônico |
---|---|
. | ponto |
[] | lista |
[^] | lista negada |
? | opcional |
* | asterisco |
+ | mais |
{} | chaves |
^ | circunflexo |
$ | cifrão |
b | borda |
escape | |
| | ou |
() | grupo |
1 | retrovisor |
Agora que sabemos como chamá-los, veremos
uma prévia, um apanhado geral de todos os metacaracteres e suas funções. Eles
estão divididos em quatro grupos distintos, de acordo com características
comuns entre eles.
Representantes
meta mnemônico função
------------------------------------------------------
. ponto um caractere qualquer
[...] lista lista de caracteres permitidos
[^...] lista negada lista de caracteres proibidos
Quantificadores
meta mnemônico função
---------------------------------------------------------------
? opcional zero ou um
* asterisco zero, um ou mais
+ mais um ou mais
{n,m} chaves de n até m
Âncoras
meta mnemônico função
------------------------------------------------------
^ circunflexo início da linha
$ cifrão fim da linha
b borda início ou fim de palavra
Outros
meta mnemônico função
------------------------------------------------------
c escape torna literal o caractere c
| ou ou um ou outro
(...) grupo delimita um grupo
1...9 retrovisor texto casado nos grupos 1...9
Como utilizar as expressões regulares?
A estrutura de uma ER pode ser assim:
'/regularexp/'
Note que regularexp é onde você deve inserir a expressão
regular em si. Um detalhe importante é que, caso você utilize barras dentro da
ER, você vai precisar colocar uma barra invertida, já que trata-se de
metacaractere. Vamos ver um exemplo pra um melhor entendimento.
$pattern
= ‘/http://profissionais.ws/‘;
$result =
“”;
preg_match($pattern,
$subject, $result);
echo “<pre>”;
print_r($result);
echo “</pre>”;
No exemplo acima, eu tenho uma string com o domínio
profissionais web, e uma string com a ER. Note que utilizei uma barra invertida
sempre que uma barra, ou ponto apareceu na ER. Isso foi feito porque esses são
metacaracteres especiais e caso eu não tivesse colocado a barra invertida, eles
seriam interpretados por suas funções dentro da ER, e não como strings.
É interessante dizer também que você pode utilizar o sinal %
invés das barras // para montar a ER, ficaria algo desse tipo:
[code]$pattern
= ‘%http://profissionais.ws%’;[/code]
A vantagem desse procedimento é que você não vai precisar colocar uma
barra invertida em toda barra que apareça na ER. Em contrapartida, você terá que
colocar uma barra invertida antes de cada sinal de percentagem que aparecer na
ER. Então é uma questão matemática, caso a barra apareça mais vezes que o sinal
de percentagem na ER, você poderia utilizar ‘%regexp%’ já que pouparia tempo,
caso contrário utilize a outra forma ‘/regexp/’.
Algumas dicas sobre ER:
1- Como casar nova linha (quebra de linha) em expressões
regulares?
– Você pode utilizar essas duas idéias:
1) ‘/n/’ – casa uma quebra de linha
2) ‘/.*/s’ – Colocar o s depois da última barra fará com que
o ponto (.) case qualquer caractere, inclusive new line.
2- Como tornar uma Expressão Regular Case Insensitive
(Não diferencia maiúsculas de minúsculas)?
– Veja como:
‘/regexp/i’ – Colocando o i após a última barra irá tornar
a ER case insensitive.
3- Como casar início e final de linha em uma expressão
regular?
– Veja como:
‘/^regexp$/m’
Colocar o m após a última barra faz com que a ER considere as âncoras ^ e $ para inicio e final de linhas
Além disso, temos também o modificador /x. Quando utilizado,
os espaços entre os caracteres não especiais não serão considerados. Você
também pode unir modificadores para satisfazer seu anseio, dessa forma:
'/regexp/simx
Espero que este artigo tenha sido útil para você e que
consiga tirar proveito de ER. Se ainda restar alguma dúvida, deixe um comentário aqui que responderei a todas. Obrigado.