/ / Como usar expressões regulares básicas para pesquisar melhor e economizar tempo

Como usar expressões regulares básicas para pesquisar melhor e economizar tempo

banner-01

Se você está pesquisando com Grep ouolhando para programas que podem renomear arquivos em lote para você, você provavelmente já se perguntou se havia uma maneira mais fácil de fazer seu trabalho. Felizmente, existe e é chamado de "expressões regulares".

(Quadrinhos do XKCD.com)

O que são expressões regulares?

Expressões regulares são instruções formatadas em ummaneira muito específica e que pode representar muitos resultados diferentes. Também conhecido como "regex" ou "regexp", eles são usados ​​principalmente nas funções de pesquisa e nomeação de arquivos. Um regex pode ser usado como uma fórmula para criar um número de diferentes saídas possíveis, todas pesquisadas. Como alternativa, você pode especificar como um grupo de arquivos deve ser nomeado, especificando uma regex, e seu software pode avançar de maneira incremental para a próxima saída pretendida. Dessa forma, você pode renomear vários arquivos em várias pastas com muita facilidade e eficiência e pode ir além das limitações de um sistema de numeração simples.

Como o uso de expressões regulares depende deuma sintaxe especial, seu programa deve ser capaz de lê-los e analisá-los. Muitos programas de renomeação de arquivos em lote para Windows e OS X têm suporte para regexps, bem como a ferramenta de pesquisa de plataforma cruzada GREP (que abordamos em nosso Guia de scripts para iniciantes de Bash) e a ferramenta de linha de comando do Awk para * Nix. Além disso, muitos gerenciadores de arquivos, inicializadores e ferramentas de pesquisa alternativos os utilizam, e eles têm um lugar muito importante em linguagens de programação como Perl e Ruby. Outros ambientes de desenvolvimento como .NET, Java e Python, bem como o próximo C ++ 11, todos fornecem bibliotecas padrão para o uso de expressões regulares. Como você pode imaginar, eles podem ser realmente úteis ao tentar minimizar a quantidade de código que você coloca em um programa.

Uma observação sobre como escapar caracteres

Antes de mostrarmos exemplos, gostaríamos deaponte algo. Usaremos o shell bash e o comando grep para mostrar como aplicar expressões regulares. O problema é que, às vezes, queremos usar caracteres especiais que precisam ser passados ​​para o grep, e o shell bash interpretará esse caractere porque ele também o usa. Nessas circunstâncias, precisamos "escapar" desses personagens. Isso pode ficar confuso porque esse "escape" de caracteres também ocorre dentro de regexps. Por exemplo, se queremos inserir isso no grep:

<

teremos que substituir isso por:

\ <

Cada caractere especial aqui recebe uma barra invertida. Como alternativa, você também pode usar aspas simples:

'<'

Aspas simples dizem ao bash para não interpretar o que édentro deles. Embora exijamos que essas etapas sejam executadas para que possamos demonstrar por você, seus programas (especialmente os baseados em GUI) geralmente não exigem essas etapas extras. Para manter as coisas simples e diretas, a expressão regular real será dada a você como texto citado e você verá a sintaxe escapada nas capturas de tela da linha de comando.

Como eles se expandem?

Regexps são uma maneira muito concisa de especificar termos, para que seu computador possa expandi-los em várias opções. Vamos dar uma olhada no seguinte exemplo:

tom [0123456789]

Os colchetes - [e] - informam ao mecanismo de análise que, o que estiver dentro, qualquer caractere ONE pode ser usado para corresponder. Tudo o que está dentro desses colchetes é chamado de conjunto de caracteres.

Portanto, se tivéssemos uma lista enorme de entradas e usássemos esse regex para pesquisar, os seguintes termos seriam correspondidos:

  • tom
  • tom0
  • tom1
  • tom2
  • tom3

e assim por diante. No entanto, a lista a seguir NÃO seria correspondida e, portanto, NÃO apareceria nos seus resultados:

  • tomate ; o regex não considera nenhuma letra após "tom"
  • Tom; o regex diferencia maiúsculas de minúsculas!

Você também pode optar por pesquisar com um ponto (.) Que permita a presença de qualquer caractere, desde que exista um caractere presente.

reg vs period

Como você pode ver, grepping com

.tom

não trouxe termos que só tinham “tom” nocomeçando. Até os "tomates verdes" chegaram, porque o espaço anterior a "tom" conta como um personagem, mas termos como "tomF" não tinham um caractere no início e, portanto, eram ignorados.

Nota: o comportamento padrão do Grep é retornar uma linha de texto inteira quando alguma parte corresponder ao seu regex. Outros programas podem não fazer isso, e você pode desativá-lo no grep com o sinalizador '-o'.

Você também pode especificar a alternância usando um pipe (|), como aqui:

speciali (s | z) e

Isso encontrará ambos:

  • especializar
  • especializar

Ao usar o comando grep, precisamos escapar dos caracteres especiais (, | e) com barras invertidas, além de utilizar o sinalizador '-E' para que isso funcione e evitar erros feios.

tubo de escape paren

Como mencionamos acima, isso ocorre porque precisamosdiga ao shell bash para passar esses caracteres para grep e não fazer nada com eles. O sinalizador '-E' diz ao grep para usar os parênteses e o pipe como caracteres especiais.

Você pode pesquisar por exclusão usando um cursor que esteja dentro dos colchetes e no início de um conjunto:

tom [^ F | 0-9]

Novamente, se você estiver usando grep e bash, lembre-se de escapar desse cano!

acento circunflexo

Os termos que estavam na lista, mas NÃO foram exibidos, são:

  • tom0
  • tom5
  • tom9
  • tomF

Estes não correspondem ao nosso regex.

Como posso utilizar ambientes?

Muitas vezes, pesquisamos com base em limites. Às vezes, queremos apenas cadeias que apareçam no início de uma palavra, no final de uma palavra ou no final de uma linha de código. Isso pode ser feito facilmente usando o que chamamos de âncoras.

O uso de um sinal de intercalação (fora dos parênteses) permite designar o "início" de uma linha.

^ tom

começo de linha

Para procurar o final de uma linha, use o sinal de cifrão.

tom $

fim da linha

Você pode ver que nossa string de pesquisa vem ANTES da âncora neste caso.

Você também pode fazer as correspondências que aparecem no início ou no final das palavras, não nas linhas inteiras.

<tom

tom>

implorar de palavra

fim da palavra

Como mencionamos na nota no início deste artigo, precisamos escapar desses caracteres especiais porque estamos usando o bash. Como alternativa, você também pode usar aspas simples:

começo da palavra q

fim da palavra q

Os resultados são os mesmos. Certifique-se de usar aspas simples e não aspas duplas.

Outros recursos para Regexps avançados

Só atingimos a ponta do iceberg aqui. Você também pode pesquisar por termos monetários delineados pelo marcador de moeda e pesquisar qualquer um dos três ou mais termos correspondentes. As coisas podem ficar realmente complicadas. Se você estiver interessado em aprender mais sobre expressões regulares, consulte as seguintes fontes.

  • O Zytrax.com tem algumas páginas com exemplos específicos de por que as coisas combinam e não combinam.
  • O Regular-Expressions.info também possui um guia matador de muitas coisas mais avançadas, além de uma página de referência prática.
  • O Gnu.org tem uma página dedicada ao uso de regexps com grep.

Você também pode criar e testar suas expressões regulares usando uma ferramenta online gratuita baseada em Flash chamada RegExr. Funciona conforme você digita, é gratuito e pode ser usado na maioria dos navegadores.


Você tem um uso favorito de expressões regulares? Conhece um grande renomeador de lote que os utiliza? Talvez você só queira se gabar do seu grep-fu. Contribua com seus pensamentos comentando!