nbsp的Ruby regexp处理
在ruby 1.9.3中,正则表达式引擎不将nbsp(\u00A0)视为空格(\s)。这对我来说常常是个麻烦 所以我的问题是,这会在2.0中改变吗?如果没有,是否有办法对解决方案进行修补?使用Unicode属性(您需要声明匹配的源代码编码才能工作): 或使用POSIX字符类:nbsp的Ruby regexp处理,ruby,regex,ruby-2.0,Ruby,Regex,Ruby 2.0,在ruby 1.9.3中,正则表达式引擎不将nbsp(\u00A0)视为空格(\s)。这对我来说常常是个麻烦 所以我的问题是,这会在2.0中改变吗?如果没有,是否有办法对解决方案进行修补?使用Unicode属性(您需要声明匹配的源代码编码才能工作): 或使用POSIX字符类: if subject ~= /[[:space:]]/ 根据,现在和将来,\s将只匹配[\t\r\n\f]。在Ruby中,我建议使用Unicode字符类“空格分隔符”\p{Zs}: /\p{Zs}/u =~ "\xC
if subject ~= /[[:space:]]/
根据,现在和将来,
\s
将只匹配[\t\r\n\f]
。在Ruby中,我建议使用Unicode字符类“空格分隔符”\p{Zs}
:
/\p{Zs}/u =~ "\xC2\xA0"
/\p{Zs}/u =~ "\u00A0"
/\p{Zs}/u =~ HTMLEntities.new.decode(' ')
有关更多信息,请参阅Ruby文档
注意:确保输入字符串是有效的UTF-8编码。在其他编码中也有不间断空格,例如ISO-8859-1(拉丁文1)中的“\xA0”
仅供参考:在大多数支持Unicode的RegExp风格和编程语言中,字符类
\s
通常包括Unicode“separator”属性\p{Z}
中的所有字符(如Tim Pietcker所述);然而,Java和Ruby是这里流行的例外,而且\s
只匹配[\t\r\n\f]
谢谢蒂姆,这个{Z}很有趣。你能解释一下你所说的其他分隔符是什么意思吗?@pguardiario:对不起,我不知怎么错过了你的评论。Unicode标准定义了许多其他分隔符,这些分隔符似乎主要用于东方语言,在东方语言中,单词不一定明显地由空格分隔。
/\p{Zs}/u =~ "\xC2\xA0"
/\p{Zs}/u =~ "\u00A0"
/\p{Zs}/u =~ HTMLEntities.new.decode(' ')