我刚刚将Ruby 1.9.3中的一个小宝石移植到了漂亮的新Ruby 2.0.0上。我必须做的唯一改变是正则表达式。
在1.9.3下,以下正则表达式将匹配包含除数字,数字相关标点符号和空格(包括不间断空格)之外的字符的任何字符串。
/[^[[:space:]]\d\-,\.]/
在2.0.0之下,我不得不将Posix空间类从否定类的开头移开。
/[^\d\-,\.[[:space:]]]/
我没有在我审核的补丁说明中找到这种变化。是否记录在哪里?
答案 0 :(得分:8)
正则表达式引擎已更改为Onigmo(基于Oniguruma),这可能会导致问题。
据我所知,你正确地声明了正则表达式。第二组括号不是必需的:
/[^[:space:]\d\-,\.]/
[:space:]
声明仅在集合内部无效,因此如果单独使用,您将看到它显示为[[:space:]]
。在您的情况下,您还可以添加其他几个。
我不确定为什么\s
在这种情况下不够用。