在 ruby 1.9.3 中,正则表达式引擎不会将 nbsp (\u00A0) 视为空格 (\s)。这对我来说常常是一个无赖。
所以我的问题是,这会在 2.0 中发生变化吗?如果没有,有没有办法猴子补丁解决方案?
使用 Unicode 属性(您需要声明匹配的源代码编码才能使用):
# encoding=utf-8
if subject ~= /\p{Z}/
# subject contains whitespace or other separators
或使用 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(' ')
有关更多Unicode 字符属性,请参阅 Ruby 文档。
注意:确保您的输入字符串是有效的 UTF-8 编码。其他编码中也有不间断的空格,例如 ISO-8859-1 (Latin1) 中的“\xA0”。有关“不间断空间”的更多信息。
仅供参考:在大多数支持 Unicode 的 RegExp 风格和编程语言中,字符类\s
通常包括来自 Unicode“分隔符”属性的所有字符\p{Z}
(如 Tim Pietcker 所述);但是,Java和Ruby是这里流行的例外,并且\s
只匹配[ \t\r\n\f]
.