DEV Community

Patrícia Villela for Feministech

Posted on

Expressões Regulares III - âncoras, limites de palavras e caracteres de palavras

Âncoras

"Âncora" é o nome que damos para os caracteres ^ e $. ^ significa o início da linha e $ significa o fim da linha.
Então se eu tiver a seguinte regex

^[Tt]este

e aplicá-la ao seguinte texto

Teste unitário é um tipo de teste que visa testar
apenas uma unidade de código, como um fluxo determinado de
uma função.
Enter fullscreen mode Exit fullscreen mode

A regex vai dar match apenas no primeiro Teste porque ele está no início da linha, representado pelo ^. A mesma coisa acontece com $.

A regex
nunca$
aplicada no texto

Lembre-se, nunca diga nunca
Enter fullscreen mode Exit fullscreen mode

vai dar match somente no segundo nunca.

Limites de palavras

Limites de palavras é o nome que damos ao caracter especial \b. Ele serve para darmos match no início ou no final de uma palavra.

A regex
\bvel
aplicado sobre o texto
O vel da noiva é invisível
vai dar match apenas na palavra vel, porque \b dá o match no limite da palavra.

Em contrapartida, o caracter \B vai dar match em posições que \b não dá match.

\Bvel
aplicado sobre o texto
O vel da noiva é invisível
dá match no vel de invisível.

Mas como a engine sabe que a palavra acabou? Como ela decide o final da palavra anti-herói? \b dá match no que \w não dá. \w é chamado de word character. Ele dá match em "caracteres de palavras", então as letras do alfabeto, algarismos e underline (_). Algumas implementações, ou flavors, de regex suportam Unicode por padrão, como a engine do Python. Nas que não suportam, o ó de herói não será reconhecido como \w se não for colocada uma flag, que na maioria dos flavors é u. Falaremos sobre flags mais pra frente.
No entanto, nenhuma engine de regex dá match no hífen (-). Então se você quiser que a sua engine dê match em anti-herói, você precisará da seguinte regex

/[\w-]+/u

Assim você engloba tanto todos os caracteres representados por \w e o hífen.
Notem que eu coloquei duas barras (/), uma no começo e uma no final da regex. Esses são os separadores e indicam quando a regex começa e termina. Esses separadores não foram incluídos antes porque não eram necessários para a explicação, mas por conta da flag u, foi preciso incluí-los. Novamente, falaremos sobre flags mais pra frente.

Conclusão

Nessa parte foi a primeira vez que eu falei de flavors de regex. É importante falar sobre isso porque o que a gente chama de regex é na verdade uma especificação. Cada linguagem ou plataforma implementa de uma maneira diferente essa especificação, então agora é a primeira vez que digo uma das regras da regex, que eu mesmo formulei.

Regra 3: conheça muito bem sua engine de regex

Até a próxima.

Top comments (0)