在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中,我建议使用Unicode字符类 “空格分隔” \p{Zs}
的:
/\p{Zs}/u =~ "\xC2\xA0"
/\p{Zs}/u =~ "\u00A0"
/\p{Zs}/u =~ HTMLEntities.new.decode(' ')
中查看Unicode character properties Ruby的文档。
注意:确保您的输入字符串是有效的UTF-8编码。其他编码中也有非中断空格,例如ISO-8859-1(Latin1)中的“\ xA0”。 More info on the "non-breaking space"。提供:在大多数支持Unicode的RegExp风格和编程语言中,字符类\s
通常包含Unicode“分隔符”属性\p{Z}
(如Tim Pietcker所述)中的所有字符;字符分类为\s
。然而,Java和红宝石是这里流行的例外,\s
只匹配[ \t\r\n\f]
。
谢谢Tim,\ p {Z}很有趣。你能解释一下其他分隔符的含义吗? – pguardiario
@pguardiario:对不起,我不知何故错过了你的评论。 Unicode标准定义了许多其他分隔符,这些分隔符似乎主要用于东方语言,其中文字不一定明显地被空白分隔。 –