我刚刚将一个小 gem 从 Ruby 1.9.3 移植到了漂亮的新 Ruby 2.0.0。我必须做的唯一改变是在正则表达式中。
在 1.9.3 下,以下正则表达式将匹配包含除数字、与数字相关的标点和空格(包括不间断空格)以外的字符的任何字符串。
/[^[[:space:]]\d\-,\.]/
在 2.0.0 下,我不得不将 Posix 空间类从否定类的开头移开。
/[^\d\-,\.[[:space:]]]/
我没有在我查看过的补丁说明中发现此更改。它在任何地方都有记录吗?
正则表达式引擎已更改为 Onigmo(基于Oniguruma),这可能会导致问题。
据我所知,您错误地声明了正则表达式。第二组括号不是必需的:
/[^[:space:]\d\-,\.]/
该[:space:]声明仅在集合内无效,因此您会看到它看起来[[:space:]]好像是单独使用的。在您的情况下,您还有其他几个添加到集合中。
我不确定为什么\s在这种情况下还不够。