2010-08-26 14 views
9

Używam Ruby 1.9 i próbuje dowiedzieć się, który REGEX muszę zrobić to prawda:Jak dopasować słowa unicode z rubinem 1.9?

Encoding.default_internal = Encoding.default_external = 'utf-8' 
"föö".match(/(\w+)/u)[1] == "föö" 
# => false 
+0

Konwertuj oba ciągi na ten sam kod Unicode, niż można dopasować. Za pomocą Iconv możesz skonwertować ciąg znaków do określonego unicode. –

+0

Dodano domyślne kodowanie. Nadal nie działa ... – Reactormonk

+0

Spróbuj umieścić komentarz "# kodowanie utf-8" na początku skryptu i upewnij się, że plik skryptu to utf-8. – Nakilon

Odpowiedz

36
# encoding=utf-8 
p "föö".match(/\p{Word}+/)[0] == "föö" 
+2

oh, kocham cię! – Hock

+1

Szalony, że musisz oznaczyć kod źródłowy jako UTF8, aby regexp zachowywał się poprawnie z właściwym kodowaniem. Wielkie dzięki ! – demental

+2

Dobra dokumentacja do tego można znaleźć tutaj: http://www.ruby-doc.org/core-1.9.3/Regexp.html#label-Character+Properties –

0

Można manually turn on Unicode matching użyciu wewnątrz (?u) składnię:

"föö".match(/(?u)(\w+)/)[1] == "föö" 
# => true 

Jednak użycie Unicode Property Składnia (Odpowiedź Steenslaga) lub POSIX Brackets Składnia jest lepszym stylem, ponieważ oba automatycznie automatycznie respektują punkty kodowe Unicode:

"föö".match(/(\p{word}+)/)[1] == "föö" 
# => true 

"föö".match(/([[:word:]]+)/)[1] == "föö" 
# => true 

Aby uzyskać więcej informacji o dopasowywaniu znaków Unicode w wyrażeniach regularnych w języku Ruby, zobacz artykuł .