ruby 1.8.7 вопрос о регулярном выражении unicode

#ruby #regex

#ruby #регулярное выражение

Вопрос:

Как я могу заставить это регулярное выражение работать в ruby 1.8.7?

 regexp = /[^ёЁа-яА-Яa-zA-Zà-üÀ-Ü0-9.- _]/
  

Оно должно работать следующим образом

 "⟲«Du côté des chars lourds»_123.doc".gsub(regexp, "_"): "__Du_côté_des_chars_lourds__123.doc"
  

В ruby 1.9.2 это работает, но не в ruby 1.8.7.

Комментарии:

1. Потому что это в драгоценном камне, который также должен быть доступен пользователям ruby 1.8.7. 🙂

2. Кажется, работает над Rubular, который также использует 1.8.7: rubular.com/r/SnEByiEjQv

3. Может ли это быть проблемой с кодировкой исходного файла ruby?

4. Это действительно странно. Я только что попробовал это снова, используя ree-1.8.7-2011.03 и irb, и это не работает. Может ли кто-нибудь еще попробовать использовать ree и irb?

Ответ №1:

Добавьте u (Unicode) модификатор к вашему регулярному выражению:

 regexp = /[^ёЁа-яА-Яa-zA-Zà-üÀ-Ü0-9.- _]/u
  

Комментарии:

1. Спасибо, это работает! Вы знаете, как я могу передать эту опцию, используя Regexp.new? Regexp.new(‘…’, ‘u’), похоже, не работает.

2. @gucki, модификаторы кодировки символов входят в третий аргумент. Попробуйте: Regexp.new("...", nil, "u") .