Regular Expressions: Negative lookahead

De tempos em tempos eu dou uma olhada em alguns foruns, na web. E, também de tempos em tempos, acabo aprendendo algumas coisas interessantes.

Regular Expressions é um mecanismo de manipulação de strings. Se você quer verificar se uma substring pertence a uma string não precisa varrer toda a string para isso. Use regex (abreviação de regular expression). Só que elas geralmente são usadas para verificar se uma regra é aplicável a uma string. Eu uso isso, por exemplo, no processo de conversão de arquivos de vídeo:

for i in *; do
  ffmpeg -i "$i" -c:v libx264 -c:a ac3 -sameq \
    "$(echo $i | sed 's/\.[^.]\+$/.mp4/')"
done

O texto marcado em vermelho é uma regex, uma regra que diz “substring que começa com ‘.’, seguida de um ou mais caracteres que não são ‘.’, no final da string”.

Mas, e se quisermos verificar a regra que não está presente na string? Com grep podemos usar a opção -v, mas em outros lugares temos a opção de usar um treco chamado negative lookahead. Num agrupamento  – usando os caracteres ‘(‘ e ‘)’ – podemos escrever algo assim:

(?!substring)

Essa regex é a regra negada. Ou seja, a regex será verdadeira se “substring” não estiver na string. Ainda não testei, mas creio que “substring” pode ser uma regra mais complexa…

Uma excelente página para aprender mais sobre Regular Expressions é essa aqui.

Anúncios

2 comentários sobre “Regular Expressions: Negative lookahead

Deixe um comentário

Faça o login usando um destes métodos para comentar:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s