Compare Preços no Buscape e no BondFaro
BuscaPé, líder em comparação de preços na América Latina

HP AMD Turion 64 X2 1.9 GHz
2 Gb RAM - 160 Gb HD

O Pequeno Príncipe
Antoine Saint-Exupery

Filmadora Samsung
SC-MX10A Digital

Sociedade dos
Poetas Mortos

Roteador Linksys

Pelúcia Snoopy

Patinho Faminto
www.patinho.net

Apostilas
Expr Regular
Remasterização
SED
Shell Script

Distros
Dizinha
Patinho Faminto

Nerd
Desejo Nerd
Shell Scripts

Artístico
Livro
Musica
Poesias
Tirinhas

Bobagens
Ascii Art
Games Antigos
Porque Amar Nerds
Porque Não Amar Nerds

Eu
About Me
Recomendo
Contato
DOAÇÕES

Amigos
Aurélio
Jogos Antigos
NeoDizinha
Nerds Nervosos
ProibidoParaNormais


* = Recentemente Atualizado



website stats
Locations of visitors to this page

Anúncio provido pelo BuscaPé
BuscaPé, líder em comparação de preços na América Latina

Ver Indice Geral da Apostila de Expressões Regulares

Outros Metacaracteres

Vamos dar uma olhada em alguns outros metacaracteres

Outros Metacaracteres
\Usado para escrever o valor literal de um metacaractere
|Indica "ou".
( )Agrupa caracteres

 
 

O Metacaractere \

Imagine que procures pela palvra "*nix" em um texto, mas o "*" é um metacaractere se usarmos ele será interpretado como metacaractere.
Então como fazer quando eu precisar procurar pelo caractere "*"?
Para isso usamos o Metacactere \. A \ anula o efeito do metacactere que vem logo após ela.

Para entender melhor crie um arquivo chamado "especiais" com o seguinte conteúdo:

especiais
asterisco*asterisco
barra\invertida
chapeu^chapeu
*nix

Agora vamos ver o \ em ação.

Digite no Terminal

grep -wE "\*.*" especiais
Mostrará na tela
*nix

Assustador?
Não é não, vamos com calma
O \* indica que a palavra procurada começa com *
O .* indica qualquer caractere e em qualquer quantidade
Então "\*.*" indica: qualquer palavra que comece por "*"

 
 

Como imprimir todas linhas que tenham \? Basta usar \\.
Veja:

Digite no Terminal

grep -wE '.*\\.*' especiais
Mostrará na tela
barra\invertida

Mais uma vez o código parece confuso, mas é simples
.* significa qualquer caracter em qualquer quantia
\\ significa uma barra \
.* novamente temos qualquer caracter em qualquer quantia
Então '.*\\.*' busca uma palavra que possua uma barra no meio dessa palavra :D

 
 

O Metacaractere |

O | pode ser entendido como "ou".
Vamos voltar a nossa lista de nomes, imagine que queira buscar o nome "maria" e o nome "carlos"

Digite no Terminal

grep -wE 'maria|carlos' ER
Mostrará na tela
maria
carlos

Ou seja, na linha que possua "maria" ou "carlos" o Grep imprime.
Essa opção de "ou" é mais usada com o metacaractere que agrupa caracteres, que vamos ver agora

 
 

O Metacaractere ( )

Imagine agora que queremos buscar por "marina" "mariana" e "mariane".
Usando somendo o metacaractere | ficaria:

Digite no Terminal

grep -wE 'marina|mariana|mariane' ER

Ficou meio longo não?
O exemplo é pequeno, mas existem ocasiões que digitando ficaria bem longo.
Imagina ter que digitar tudo?

Por isso usamos o ( ), repare que as 3 palavras começam exatamente iguais, começam com "mari".
Então escrevemos "mari" e colocamos a possíveis terminações.
Veja:

Digite no Terminal

grep -wE 'mari(na|ana|ane)' ER

O grep busca todas palavras que comecem com "mari" em seguida analisa se a palavra contém uma das 3 terminações pedidas.
E se eu quiser que escreva a palavra "mari" também?
Simples, basta pôr um "|" sem nada.

Digite no Terminal

grep -wE 'mari(|na|ana|ane)' ER
Mostrará na tela
mari
marina
mariana
mariane

 
 

E se eu quiser que apareça outros nomes junto?
Por exemplo "carlos" e "carla". Dá?
Mas é claro que dá meu jovem discípulo.
Veja como fica:

Digite no Terminal

grep -wE 'mari(|na|ana|ane)|car(los|la)' ER
Mostrará na tela
mari
marina
mariana
mariane
carlos
carla

 
 

Dá para usar um ( ) dentro de outro ( )?
Se você pensou em agrupar o "e" e o "a" depois do "an" de "mariana" e "mariane" dentro da própria lista, pensou bem. Mas essa não é a melhor solução ;)
Vejamos como fica dessa maneira.

Digite no Terminal

grep -wE 'mari(|na|an(a|e))|car(los|la)' ER

Confuso não?
temos um prefixo "mari" em seguida o grep testa as opções dentro do ( ).
Quando ele chega em "an", ele mantém "marian" e testa com as terminações "a" e "e".

 
 

Lembra do nosso amigo [ ]?
Ele seleciona possíveis caracteres, ele se aplica melhor nesse trabalho
Veja:

Digite no Terminal

grep -wE 'mari(|na|an[ae])|car(los|la)' ER

Nossa linha ficou menor e mais legível
Mesmo assim acho que, nesse caso, a melhor solução seria a linha:
grep -wE 'mari(|na|ana|ane)|car(los|la)' ER
Essa linha é mais longa, mas também é mais fácil de entender ;)
E a diferença de tamanho entre elas também não é tão significativa.

Lembre-se que o menor nem sempre é o melhor, muitas vezes devemos optar pelo que fica mais fácil entender.

 
 

Nota: 10

Votar:
Postado em: 2008-05-20

Ver Indice Geral da Apostila de Expressões Regulares

Doações
Se quer nos ajudar, pode doar pelo PagSeguro

Ou pode doar pelo Paypal clicando no botão DONATE

Compare Produtos, Lojas e Preços


As poesias devem virar um livro impresso?
Claro
Só se tiver menos de 60 páginas
Só se tiver entre 60 e 120 páginas
Só se tiver mais que 120 páginas
Só vou comprar se for barato
Só vou comprar para você ficar feliz
Livro? Que Livro? Que poesia?
Resultado