我在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字符的字符串会干扰后续的正则表达式匹配?大概这是一个错误,但我找不到任何有关它是如何引起或如何解决它的信息。