【问题标题】:Ruby Regexp not matching unicode quotes with POSIX bracket expressionRuby Regexp 与 POSIX 括号表达式不匹配 unicode 引号
【发布时间】:2023-03-24 13:35:01
【问题描述】:

我正在尝试在更复杂的正则表达式上使用[[:punct:]]POSIX 括号表达式,我发现它与以下问题有关:

我在 Ruby 的 2.4.4 irb 控制台上运行了这个,产生了一个有效的匹配:

irb(main):001:0> " >text" =~ /[[:punct:]]text/
=> 1

但是,如果我添加一个 UTF8 引号字符 (),它将不匹配:

irb(main):002:0> "” >text" =~ /[[:punct:]]text/
=> nil

但如果我使用. 而不是>,它确实可以按我的预期工作:

irb(main):003:0> " .text" =~ /[[:punct:]]text/
=> 1
irb(main):004:0> "” .text" =~ /[[:punct:]]text/
=> 2

我不是试图为此找到解决方法,而是试图理解为什么在第二种情况下不匹配。

【问题讨论】:

  • [13] pry(main)> "” >text" =~ /[[:punct:]]text/ #=> 2 为我工作
  • 你使用什么 ruby​​ 版本? 4.4.5 似乎更像是 rails 版本,而不是 ruby​​ 版本。
  • @mrzasa 抱歉,我已经更新了问题。 Ruby 的版本是 2.4.4,安装了rbenv

标签: ruby-on-rails regex ruby ruby-on-rails-4


【解决方案1】:

问题是 POSIX 括号表达式[[:punct:]] 它可能匹配不同的字符。 你可以找到一些细节here

要找出某个角色在您本地的类别,请尝试A Unicode character's General Category

例如,使用 ruby​​ 2.2.4:

irb(main):001:0> /[[:punct:]]/n =~ '<'
=> nil

但如果我使用符号通用类别

irb(main):002:0> /\p{S}/u =~ '<'
=> 0

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多