terça-feira, maio 12, 2015

Acentos em expressões regulares (Ruby)

Já tentou fazer expressões regulares para dar match em letras acentuadas?

Desagradável...

É comum chegar em algo do tipo:


/[\wáéíóúâêôç...]+/

Mas não se desespere, pequeno gafanhoto. Existe um meio MUITO mais fácil! \o/


/[[:word:]]+/

Não é tão elegante quanto um simples "\w" (que não pega caracteres acentuados), mas é muito mais curto ^_^


Testa aí no IRB, e depois procura por POSIX bracket expressions na documentação do Regex do Ruby, tem mais coisas úteis lá (gosto muito do [[:upper:]]).

5 comentários:

  1. Dá para usar os "characters properties" (http://ruby-doc.org/core-2.1.5/Regexp.html#class-Regexp-label-Character+Properties) também, dá para fazer uns trecos legais com eles:

    "eustáquio" =~ /\A\p{Latin}+\z/
    => 0

    ResponderExcluir
    Respostas
    1. Uia! Bem bacana!!! O_o

      Recentemente (tipo, ontem...), usei o [[:punct:]], equivalente ao \p{Punct}.

      Mas tem uns ali que vou acabar testando só para entender: \p{Cs} "Surrogate"??? \p{Mark}? :D

      Excluir
    2. Tem coisa que é macumba, cuidado. :-)

      Excluir
  2. Acabei de aprender outra macumba:

    "Eustáquio" =~ /\A\w+\z/ => nil
    "Eustáquio" =~ /\A(?u)\w+\z/ => 0

    O "uzinho" é de Unicode. :-)

    ResponderExcluir
    Respostas
    1. Só tenho um comentário:

      "Affff, chuta!!"

      Excluir