Как указать диапазон символов регулярного выражения, который будет работать на европейских языках, кроме английского? - PullRequest
6 голосов
/ 15 февраля 2011

Я работаю с движком регулярных выражений Руби.Мне нужно написать регулярное выражение, которое делает это

WIKI_WORD = /\b([a-z][\w_]+\.)?[A-Z][a-z]+[A-Z]\w*\b/

, но также будет работать на других европейских языках, кроме английского.Я не думаю, что диапазон символов [az] будет охватывать строчные буквы на немецком языке и т. Д.

Ответы [ 2 ]

7 голосов
/ 15 февраля 2011
WIKI_WORD = /\b(\p{Ll}\w+\.)?\p{Lu}\p{Ll}+\p{Lu}\w*\b/u

должно работать в Ruby 1.9. \p{Lu} и \p{Ll} являются сокращенными именами букв Unicode в верхнем и нижнем регистре. (\w уже включает в себя подчеркивание)

См. Также этот ответ - вам может потребоваться запустить Ruby в режиме UTF-8, чтобы это работало, и, возможно, ваш скрипт должен быть также закодирован в UTF-8.

1 голос
/ 15 февраля 2011

Джеймс Грей написал серию статей о работе с Unicode, UTF-8 и Ruby 1.8.7 и 1.9.2.Они важны для чтения.

С Ruby 1.8.7 мы можем добавить:

#!/usr/bin/ruby -kU
require 'jcode'

и получить частичную поддержку UTF-8.можно использовать:

# encoding: UTF-8

в качестве второй строки вашего исходного файла, и это скажет Ruby по умолчанию UTF-8.Grey рекомендует делать это со всеми исходными текстами, которые мы пишем с этого момента.

Это не повлияет на внешнее кодирование при чтении / записи текста, только на кодирование исходного кода.

Ruby 1.9.2 не расширяет обычные классы символов \w, \W и \s для обработки UTF-8 или Unicode.Как и в других комментариях и ответах, это делают только наборы символов POSIX и Unicode в regex.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...