Câu hỏi Cách chỉ định Regexp cho các ký tự cyrillic unicode trong Ruby 1.9


#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?

Tôi đã cài đặt gói ruby ​​mới nhất từ http://rubyinstaller.org/. Đây là sản lượng của tôi ruby -v

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

Theo 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.


7
2018-04-27 14:06


gốc


trên Linux (ruby 1.9) gsub xóa tất cả các ký tự - irb (chính): 006: 0> str2.gsub (/ \ w / u, '') => "" - andrykonchin
@ Ya: nó 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ũ? - Marc-André Lafortune
Tôi sẽ đổi tên câu hỏi này là "Làm thế nào để 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. - Marc-André Lafortune
bạn đúng rồi. một lỗi của nó trong ruby ​​1.9.1p0, trong ruby ​​1.9.1p376 tất cả hoạt động tốt - andrykonchin


Các câu trả lời:


Điều này được quy định trong Tài liệu Ruby: \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.

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


11
2018-04-27 17:26



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