Как сопоставить слова юникода с ruby ​​1.9? - PullRequest
10 голосов
/ 26 августа 2010

Я использую ruby ​​1.9 и пытаюсь выяснить, какое регулярное выражение мне нужно, чтобы сделать это:

Encoding.default_internal = Encoding.default_external = 'utf-8'
"föö".match(/(\w+)/u)[1] == "föö"
# => false

Ответы [ 3 ]

37 голосов
/ 26 августа 2010
# encoding=utf-8 
p "föö".match(/\p{Word}+/)[0] == "föö"
0 голосов
/ 24 июня 2016

Вы можете вручную включить сопоставление Юникода , используя внутренний синтаксис (?u):

"föö".match(/(?u)(\w+)/)[1] == "föö"
# => true

Однако, используя синтаксис свойства Юникода (ответ steenslag) или синтаксис скобок POSIX - лучший стиль, поскольку они оба автоматически соблюдают кодовые точки Unicode:

"föö".match(/(\p{word}+)/)[1] == "föö"
# => true

"föö".match(/([[:word:]]+)/)[1] == "föö"
# => true

См. в этом блоге для получения дополнительной информации о сопоставлении символов Unicode в регулярных выражениях Ruby.

0 голосов
/ 26 августа 2010

http://www.ruby -forum.com / тема / 208777

и

http://www.ruby -forum.com / тема / 210770

может иметь подсказки для вас.

Вы также можете использовать (документированное) свойство \p{L}, например:

$ ruby -ve "p '℉üüü' =~ /\p{L}/"
ruby 1.9.2p0 (2010-08-18 revision 29036) [x86_64-linux]
1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...