【发布时间】:2016-01-26 12:13:50
【问题描述】:
在 ruby 1.9.3 中,正则表达式引擎不会将 nbsp (\u00A0) 视为空格 (\s)。这对我来说常常是一个无赖。
所以我的问题是,这会在 2.0 中发生变化吗?如果没有,有没有办法猴子补丁解决方案?
【问题讨论】:
在 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:]]/
根据the docs,\s 现在和将来只会匹配[ \t\r\n\f]。
【讨论】:
在 Ruby 中,我推荐使用“空格分隔符”\p{Zs}的Unicode字符类:
/\p{Zs}/u =~ "\xC2\xA0"
/\p{Zs}/u =~ "\u00A0"
/\p{Zs}/u =~ HTMLEntities.new.decode(' ')
有关更多信息,请参阅 Ruby 文档Unicode character properties。
注意:请确保您的输入字符串是有效的 UTF-8 编码。其他编码中也有不间断的空格,例如ISO-8859-1 (Latin1) 中的“\xA0”。 More info on the "non-breaking space".
仅供参考:在大多数支持 Unicode 的 RegExp 风格和编程语言中,字符类 \s 通常包括来自 Unicode“分隔符”属性 \p{Z} 的所有字符(如 Tim Pietcker 所述);但是,Java 和 Ruby 是这里流行的例外,\s 仅匹配 [ \t\r\n\f]。
【讨论】: