quarta-feira, maio 19, 2010

Apanhando das expressões regulares no Ruby

Estava eu brincando com o Ruby 1.9 e tentando fazer uma expressão regular bem simples:
#encoding: utf-8
puts "isso é inaceitável".scan(/\w+/)
resultado:
isso
inaceit
vel
Uh-oh... =/ nada bom.

Procurei por todo lado, tentando achar o que eu estava fazendo de errado. Achei vários posts dizendo que isso deveria funcionar e ninguém com o mesmo problema que eu. Não sei o que fiz de errado até agora, se alguém souber, por favor me avise =/

De qualquer maneira, tentei resolver o problema sem sucesso. Então, na documentação do Oniguruma, achei um "paliativo":
#encoding: utf-8
puts "isso é aceitável".scan(/\p{Word}+/)

E o resultado:
isso
é
aceitável

Ótimo!

Além disso, fuçando lá vi várias outras classes bastante úteis, como "\p{Alpha}", "\p{Alnum}, "\p{Upper}" e "\p{Lower}" entre outros. É possível também negar a classe usando um "\P" (maiúsculo) como prefixo.