Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
nbsp的Ruby regexp处理_Ruby_Regex_Ruby 2.0 - Fatal编程技术网

nbsp的Ruby regexp处理

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

在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  =~  "\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所述);然而,JavaRuby是这里流行的例外,而且
\s
只匹配
[\t\r\n\f]

谢谢蒂姆,这个{Z}很有趣。你能解释一下你所说的其他分隔符是什么意思吗?@pguardiario:对不起,我不知怎么错过了你的评论。Unicode标准定义了许多其他分隔符,这些分隔符似乎主要用于东方语言,在东方语言中,单词不一定明显地由空格分隔。
/\p{Zs}/u  =~  "\xC2\xA0"
/\p{Zs}/u  =~  "\u00A0"
/\p{Zs}/u  =~  HTMLEntities.new.decode(' ')