正则表达式在Ruby 2中略有不同?

时间:2013-02-25 21:07:52

标签: ruby regex posix

我刚刚将Ruby 1.9.3中的一个小宝石移植到了漂亮的新Ruby 2.0.0上。我必须做的唯一改变是正则表达式。

在1.9.3下,以下正则表达式将匹配包含除数字,数字相关标点符号和空格(包括不间断空格)之外的字符的任何字符串。

/[^[[:space:]]\d\-,\.]/

在2.0.0之下,我不得不将Posix空间类从否定类的开头移开。

/[^\d\-,\.[[:space:]]]/

我没有在我审核的补丁说明中找到这种变化。是否记录在哪里?

1 个答案:

答案 0 :(得分:8)

正则表达式引擎已更改为Onigmo(基于Oniguruma),这可能会导致问题。

据我所知,你正确地声明了正则表达式。第二组括号不是必需的:

/[^[:space:]\d\-,\.]/

[:space:]声明仅在集合内部无效,因此如果单独使用,您将看到它显示为[[:space:]]。在您的情况下,您还可以添加其他几个。

我不确定为什么\s在这种情况下不够用。