【问题标题】:Ruby 2.0 regex and cyrillicRuby 2.0 正则表达式和西里尔字母
【发布时间】:2013-03-29 14:32:49
【问题描述】:

在 ruby​​ 2.0 之前,正则表达式是这样工作的:

/\A[a-zа-я\d]+\z/i          =~ 'привет' # => 0
/\A[a-z\p{Cyrillic}\d]+\z/i =~ 'привет' # => 0

我更新了 ruby​​ 2.0,它有一个错误:

/\A[a-zа-я\d]+\z/i          =~ 'привет' # => nil
/\A[a-z\p{Cyrillic}\d]+\z/i =~ 'привет' # => nil

我该如何处理这个问题?在字符类中没有\d,它可以正常工作:

/\A[a-zа-я]+\z/i            =~ 'привет' # => 0

【问题讨论】:

  • 在我的盒子(Ubuntu/Ruby2/RoR3)regex = /\A[a-zа-я\d]+\z/i ; regex =~ 'привет' 上按预期给出了0。您是否考虑检查您的环境?
  • @mudasobwa 你确认你正在运行ruby 2.0,我在2.0 上得到了相同的结果。
  • @mudasobwa 我不建议 OP 指向未发布的版本,因为它是一种移动目标(即 ruby​​ 语言的主干分支)。
  • @Kvet 以下方式似乎对我有用:/\p{Cyrillic}/.match("привет")
  • @mudasobwa "直到 2.0.0 最终发布" 2.0.0 已经是一个发布版本 (ruby-2.0.0-p0)。

标签: ruby regex ruby-2.0


【解决方案1】:

这个错误看起来很相似,可能与我之前询问过的this bug 有关。我reported it to ruby trunk,它已被接受为一个错误。希望它会得到修复。

【讨论】:

    【解决方案2】:

    该错误似乎已在ruby-head 中修复:

    ⮀ rvm use ruby-2.0.0-preview2
    Using /home/am/.rvm/gems/ruby-2.0.0-preview2
    ⮀ irb
    2.0.0dev :001 > regex = /\A[a-zа-я\d]+\z/i ; regex =~ 'привет'
    # ⇒ nil 
    ⮀ rvm use ruby-2.0.0-preview1
    Using /home/am/.rvm/gems/ruby-2.0.0-preview1
    ⮀ irb
    2.0.0dev :001 > regex = /\A[a-zа-я\d]+\z/i ; regex =~ 'привет'
    # ⇒ nil 
    ⮀ rvm use ruby-head
    Using /home/am/.rvm/gems/ruby-head
    ⮀ irb
    irb(main):001:0> regex = /\A[a-zа-я\d]+\z/i ; regex =~ 'привет'
    # ⇒ 0
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多