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] # => Верёвочка