Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Ruby: Общие вопросы > ruby, юникод, рег.выражения, русский язык


Автор: navrocky 16.1.2009, 16:55
Столкнулся с проблемой, что руби не понимает правильно русские буквы в регулярных выражениях. Тоесть не работает тэг \w, не работает режим (?i) с русскими буквами. 

Текст и исходники в UTF8, ruby-1.8.6 под линух. 

И вообще, с какой кодировкой текста лучше работать в руби?

Автор: kemiisto 16.1.2009, 17:13
Цитата(navrocky @  16.1.2009,  14:55 Найти цитируемый пост)
Столкнулся с проблемой, что руби не понимает правильно русские буквы в регулярных выражениях.

 smile Чушь!

Цитата(navrocky @  16.1.2009,  14:55 Найти цитируемый пост)
не работает тэг \w

Ну, да, приехали. Даже по тому, что Вы называете это тэг,очевидно, что Ваш уровень знания ругулярных выражений оставляет желать лучшего. http://ru.wikibooks.org/wiki/Ruby/%D0%9F%D0%BE%D0%B4%D1%80%D0%BE%D0%B1%D0%BD%D0%B5%D0%B5_%D0%BE_%D1%81%D1%82%D1%80%D0%BE%D0%BA%D0%B0%D1%85#.D0.9F.D1.80.D0.B0.D0.B2.D0.B8.D0.BB.D0.B0_.D1.80.D0.B0.D0.B1.D0.BE.D1.82.D1.8B_.D1.81.D0.BE_.D1.81.D1.82.D1.80.D0.BE.D0.BA.D0.B0.D0.BC.D0.B8, не сочтите за грубость.

Добавлено @ 17:14
Цитата(navrocky @  16.1.2009,  14:55 Найти цитируемый пост)
И вообще, с какой кодировкой текста лучше работать в руби?

UTF-8. И не только в случае Ruby.

Автор: navrocky 16.1.2009, 18:24
Конечно спасибо за ответ  smile , но он мне не помог.

Цитата
Даже по тому, что Вы называете это тэг,очевидно, что Ваш уровень знания _ругулярных_ выражений...

Не будем придираться к словам. Привожу пример:

Код

rx_city = %r{(?i)((?:Г|П|РП|С|СТ-ЦА)\s+\w+)}
puts rx_city.match("ЛЯ-ЛЯ г Бобруйск ФА-ФА")


выдает: [nil]

Меняем на:
Код
rx_city = %r{(?i)((?:Г|П|РП|С|СТ-ЦА)\s+\w+)}
#puts rx_city.match("ЛЯ-ЛЯ г Бобруйск ФА-ФА")
puts rx_city.match("ЛЯ-ЛЯ Г Bobruysk ФА-ФА")


И результат: Г Bobruysk

ЧЯДТ?

Автор: kemiisto 16.1.2009, 18:59
navrocky, а Вы понимаете, что \w - это только любой символ на латинице или цифра. Ну не входят туда кириллические символы! И не забываем про $KCODE.

Код

$KCODE='UTF-8'
rx_city = %r{(?:Г|г|П|п|РП|рп|С|c|СТ-ЦА|ст-ца)\s+(\w+|[а-яА-Я]+)}
puts rx_city.match("ЛЯ-ЛЯ г Бобруйск ФА-ФА")
puts rx_city.match("ЛЯ-ЛЯ Г Bobruysk ФА-ФА")


А вот ignore case и правда не работает.  smile 
Цитата
Also please remember that the /i flag (case insensitive matching) does not work on Unicode strings.

Автор: kemiisto 16.1.2009, 19:38
Цитата(navrocky @  16.1.2009,  16:24 Найти цитируемый пост)
ЧЯДТ?

Много чего, как видишь. smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)