9

在 ruby​​ 1.9.3 中,正则表达式引擎不会将 nbsp (\u00A0) 视为空格 (\s)。这对我来说常常是一个无赖。

所以我的问题是,这会在 2.0 中发生变化吗?如果没有,有没有办法猴子补丁解决方案?

4

2 回答 2

10

使用 Unicode 属性(您需要声明匹配的源代码编码才能使用):

# encoding=utf-8 
if subject ~= /\p{Z}/
    # subject contains whitespace or other separators

或使用 POSIX 字符类:

if subject ~= /[[:space:]]/

根据文档\s只会[ \t\r\n\f]在现在和将来匹配。

于 2012-11-08T11:50:57.260 回答
0

在 Ruby 中,我建议使用“空格分隔符”的 Unicode 字符类\p{Zs}

/\p{Zs}/u  =~  "\xC2\xA0"
/\p{Zs}/u  =~  "\u00A0"
/\p{Zs}/u  =~  HTMLEntities.new.decode(' ')

有关更多Unicode 字符属性,请参阅 Ruby 文档。

注意:确保您的输入字符串是有效的 UTF-8 编码。其他编码中也有不间断的空格,例如 ISO-8859-1 (Latin1) 中的“\xA0”。有关“不间断空间”的更多信息

仅供参考:在大多数支持 Unicode 的 RegExp 风格和编程语言中,字符类\s通常包括来自 Unicode“分隔符”属性的所有字符\p{Z}(如 Tim Pietcker 所述);但是,JavaRuby是这里流行的例外,并且\s只匹配[ \t\r\n\f].

于 2016-01-26T04:13:50.027 回答