为什么Unicode字符会阻止[[:punct:]]字符类在Ruby 2.4中的后续regexp匹配中匹配“+”?

时间:2018-02-09 06:34:46

标签: ruby regex unicode

我在Ruby中遇到了一个奇怪的错误。在Ruby 2.4.2中,匹配包含Unicode字符的字符串会导致后续匹配失败。

这是我尝试隔离错误:

puts RUBY_VERSION
["0.", "0+", "é", "0.", "0+"].each do |phrase|
  p phrase[/[[:digit:]][[:punct:]]/]
end

以下是各种Ruby版本的输出:

2.3.5
"0."
nil
nil
"0."
nil

2.4.2
"0."
"0+"
nil
"0."
nil

2.5.0
"0."
"0+"
nil
"0."
"0+"

在2.3.5中,0+完全被遗漏,显然是因为+不被视为标点符号。在2.5.0中,0.0+都匹配。

在2.4.2中,行为令人困惑:为什么匹配包含Unicode字符的字符串会干扰后续的正则表达式匹配?大概这是一个错误,但我找不到任何有关它是如何引起或如何解决它的信息。

0 个答案:

没有答案