2010-04-27 27 views
7
#coding: utf-8 
str2 = "asdfМикимаус" 
p str2.encoding #<Encoding:UTF-8> 
p str2.scan /\p{Cyrillic}/ #found all cyrillic characters 
str2.gsub!(/\w/u,'') #removes only latin characters 
puts str2 

Câu hỏi đặt ra là tại sao \w bỏ qua các ký tự cyrillic?Cách chỉ định Regexp cho các ký tự cyrillic unicode trong Ruby 1.9

Tôi đã cài đặt gói ruby ​​mới nhất từ ​​http://rubyinstaller.org/. Dưới đây là đầu ra của tôi về ruby -v

ruby 1.9.1p378 (2010-01-10 revision 26273) [i386-mingw32] 

Theo như tôi biết 1,9 oniguruma thư viện biểu thức chính quy có hỗ trợ đầy đủ cho các ký tự unicode.

+0

trên Linux (ruby 1.9) gsub xóa tất cả ký tự - irb (chính): 006: 0> str2.gsub (/ \ w/u, '') => "" – andrykonchin

+0

@aaz: không nên (xem câu trả lời của tôi); có lẽ bạn có một phiên bản cũ? –

+0

Tôi sẽ đổi tên câu hỏi này là "Cách chỉ định Regexp cho các ký tự unicode trong Ruby 1.9", vì điều này không liên quan đến win32 cũng như không chỉ (cyrillic). –

Trả lời

10

Điều này được quy định trong Ruby documentation: \w tương đương với [a-zA-Z0-9_] và do đó không nhắm mục tiêu bất kỳ ký tự unicode nào.

Thay vào đó, bạn có thể muốn sử dụng [[:alnum:]], bao gồm tất cả các ký tự chữ và số unicode. Kiểm tra cũng [[:word:]][[:alpha:]].

+0

BTW, chúng ta có thể cảm ơn Run Paint Run Run để viết tài liệu này. –

Các vấn đề liên quan