Ruby on rails 如何包括ё;在[а;-я;]regexp字符间隔中

Ruby on rails 如何包括ё;在[а;-я;]regexp字符间隔中,ruby-on-rails,ruby,regex,rails-i18n,Ruby On Rails,Ruby,Regex,Rails I18n,俄语字母表中包括字母ё,这是在计算机时代不该被遗忘的 因此,如果我想使用带有字符diapason的regexp,我必须单独提及这封信: [а-яА-яёЁ] 而不是: [а-яА-Я] 例如: 让我们使用字符串“Счччаа-12”,只需通过正则表达式解析单词: word = "Верёвочка"[/а-яА-Я/] # => "" word = "Верёвочка"[/а-яА-ЯёЁ/] # => "Верёвочка" 我如何升级Ruby或RubyonRails中

俄语字母表中包括字母
ё
,这是在计算机时代不该被遗忘的

因此,如果我想使用带有字符diapason的regexp,我必须单独提及这封信:

[а-яА-яёЁ]
而不是:

[а-яА-Я]
例如:

让我们使用字符串“Счччаа-12”,只需通过正则表达式解析单词:

word = "Верёвочка"[/а-яА-Я/]   # => ""
word = "Верёвочка"[/а-яА-ЯёЁ/] # => "Верёвочка"

我如何升级Ruby或RubyonRails中的regexp类来解决这个问题?

是其中之一,但不是最好的选择:使用
[/а-ё/][/code>而不是
[/а-ё/][/code>。这起了作用,但方向不正确:

str = "верёвочка"
str[/^[а-ё]+$/]
#=> "верёвочка"

这很酷-我从来没有想过unicode中的字符范围

似乎出于某种原因,А-Ø在unicode范围0x410到0x44f中编码,但在0x400到0x410中添加了一些其他字符(如ё),然后在0x450到0x45f中添加了一些字符(有字符去向的完整细分)

因此,/[Ѐ-ё]/应该是可行的,但对于母语为英语的人来说可能会觉得很不合逻辑

当然,您可以执行原始unicode转义,即
/[\u0400-\u045f]/
(如果您想要完整的西里尔文块,则可以一直执行到\u04ff),但这会让您记住这一点(或者将其指定给某个常量以备将来使用)

最后,您可以使用

/\p{Cyrillic}/

虽然我的理解是这包括了更多的字符,例如

原始的
/107a-ЯА-Я//code>和
/107a-ЯА-гё/
模式分别匹配文字字符序列、
а-ЯА-Я
字符串,因为字符范围不包含
[
]
将形成字符类。即使它们是,没有量词,也只能匹配范围内的单个字符

要匹配一个或多个俄语字母的序列,您需要:

/[а-яА-ЯёЁ]+/
/[а-яё]+/i

请注意,没有像
\p{俄语}
这样的Unicode类别,而且
\p{Cyrillic}
匹配所有的西里尔字母,而不仅仅是俄语字母。字母
Ёё
不属于
г-Я
和**必须“手动”添加,请参见:

以下是:


无法分析您的句子“instead simplest”。@sawa:“instead”->“instead of”。问题是默认情况下将字符“包含”到范围
а-а
中。我不是Rubyist,但Unicode的字符类包含多种语言的字母,但不包含空格/标点--
\p{Word
是我看到的建议之一。这不仅符合
[а-а]
,而且符合
[a-z]
,等等。@TwoTwo-Two你似乎是对的。这看起来像是一个。
/[:alpha:]+/
会起作用,没错,我寻求一个人类可读的决定,就像[а-а]./\p{Cyryllic}/不在Ruby中工作:SyntaxError:(pry):2:无效的字符属性名称{Cyrillic}:/\p{Cyrillic}/对我有用(ruby 2.0.0)。ruby中的regexp引擎在不同版本之间发生了很大变化。它还包括一些非俄语字符,如
Ѐ
此解决方案不正确。请查看我的答案(我发布了一个表)哪里出错了。找不到任何东西。不确定你的意思。找到任何1+个俄语字母的块是正确的。你的
/^[а-ё]+$/
仅当整行由一个或多个字符组成,这些字符是
бббззззбзззззззчччъъэѐѐ
字母中的一个时,才会找到匹配项。请注意
不是俄语字母,您的正则表达式甚至不匹配大写俄语字母。
s = "Верёвочка - 12"
puts s[/[а-яА-ЯёЁ]+/] # => Верёвочка
puts s[/[а-яё]+/i]    # => Верёвочка