Está gostando da leitura?
Está aprendendo?
Compre o livro novo que traz mais conteúdo, texto atualizado e ilustrações!
Algumas linguagens recebem a ER como um dado do tipo "string", e não simplesmente como uma ER pronta. Essa string é primeiramente interpretada pela linguagem, e só depois é passada ao robozinho. Mas o que exatamente isso quer dizer? Muitas coisas.
Primeiro, esse tratamento prévio não é algo específico das ERs,
pois também acontece com qualquer string na linguagem, seja
para ecoar uma mensagem na tela, seja para fazer indexação. Trechos
da ER podem ser confundidos com variáveis e outras estruturas
especiais, como, por exemplo, a ER $nome poderia
ser expandida para o conteúdo da variável $nome. Mas o
que geralmente pega mesmo é a interpretação de escapes, incluindo os
barra-letras.
Isso nos afeta diretamente ao escrever uma ER, pois imagine que
queremos casar um \t literal, então escapamos o escape:
\\t. Mas ao receber essa string, a linguagem
primeiro a interpreta, e quando vê dois escapes seguidos, o que faz? O
troca por apenas um, pois \\ representa um escape
literal. Com isso nosso robozinho recebe a ER \t,
que por sua vez será interpretado como um TAB literal e nossa busca
falhará. Nesse caso, temos de prever o pré-processamento e escapar
duplamente \\\\t, para que o robozinho receba o
\\t que queríamos.
Felizmente, para que não precisemos ficar escapando tudo duplicado, a maioria dessas linguagens tem maneiras de se especificar uma "string crua" ("raw string"), que não é interpretada e é passada diretamente ao robozinho. Detalhes de como fazer isso estão no capítulo específico da cada linguagem, mais adiante. Mas essa característica também tem seu lado bom. Como alguns robozinhos não suportam os barra-letras, esse pré-processamento os reconhece e os converte, passando-os literais para o robô.
Concluindo, se a linguagem que você usa recebe as ERs como strings, descubra como deixá-las cruas, ou fique com dor de cabeça de tanto escapar os escapes...