Agora que já aprendemos todos aqueles metacaracteres, sua sintaxe, suas regras, seus detalhes, é hora de aplicar na prática esse conhecimento. E aí é que vem a surpresa, quando você percebe que alguns metacaracteres não funcionam direito... O que acontece?
O que acontece é que existe uma diferença brutal de sintaxe entre aplicativos, em que cada um coloca sua personalidade, e temos várias maneiras de representar o mesmo metacaractere.
Por exemplo: o opcional é ?
no Python, Perl e linguagens de programação mais novas. Mas em aplicativos mais antigos como o grep e o sed, ele é escapado \?
, sendo ?
uma mera interrogação literal. Já no editor de textos vim, o opcional é representado pelo esquisito \=
. Vai entender?
O motivo mais comum para isso acontecer são as razões históricas. Voltando no tempo, na época em que os primeiros programas começavam a ter suporte a expressões regulares, basicamente o que era comum de se fazer em um editor de textos eram códigos de programas, e não textos normais da linguagem falada.
Assim, como era (e ainda é) muito comum de se ter os caracteres ?
, +
, {
, (
e |
nos códigos de programas, era comum eles fazerem parte da ER por seu valor literal, ou seja, procurar por uma interrogação, por uma barra vertical, etc. Então, no começo de tudo, esses metacaracteres eram todos escapados para serem especiais: \?
, \+
, \{
, \(
e \|
.
Já aplicativos e linguagens mais novos, criados em um mundo onde a editoração eletrônica avançou muito e um "texto de computador" não era apenas um código de programa, todos os escapes foram retirados e os metacaracteres ficaram mais simples.
Aqueles aplicativos antigos, porém, continuam até hoje utilizando os escapes, pois têm de manter a compatibilidade com versões anteriores. Alguns são mais espertos e suportam ambas as sintaxes, escolhendo via configuração ou opção de linha de comando.
Toda essa historinha, além de curiosidade, está aqui para que você saiba o porquê das coisas, e isso o ajuda na hora da dúvida, pois se você sabe que o aplicativo é antigo, provavelmente os metacaracteres devem ser escapados. Ou ainda, se você viu que o opcional ?
precisou ser escapado, outros provavelmente precisarão também.
Concluindo, ora razões históricas ora vaidade do autor, o fato é que a diversidade impera e você vai ter de se acostumar com isso e aprender as diferenças de cada aplicativo que for utilizar. Bem-vindo ao mundo caótico da implementação das expressões regulares.
Mas para ajudar nesse reconhecimento da diferença, no final do guia há uma daquelas tabelinhas mágicas, que parece simples, mas demora dias para fazer, e pode e deve ser consultada em caso de dúvida.
Estão registradas todas as diferenças encontradas em vários aplicativos e linguagens. Com ela em mãos, você não precisa mais se preocupar com isso. O nome é "Diferenças de Metacaracteres Entre Aplicativos".