在ruby 1.9.3中,正则表达式引擎不会将(\ u00A0)视为空格(\ s)。这对我来说通常是个无赖。
所以我的问题是,这会在2.0中发生变化吗?如果没有,有没有办法修补解决方案?
答案 0 :(得分:8)
使用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]
。
答案 1 :(得分:0)
在Ruby中,我建议使用" 空格分隔符"的Unicode字符类。 \p{Zs}
:
/\p{Zs}/u =~ "\xC2\xA0"
/\p{Zs}/u =~ "\u00A0"
/\p{Zs}/u =~ HTMLEntities.new.decode(' ')
请参阅Ruby文档了解更多Unicode character properties。
注意:确保您的输入字符串是有效的UTF-8编码。其他编码也有不间断的空间,例如: " \ XA0"在ISO-8859-1(Latin1)中。 More info on the "non-breaking space"
仅供参考:在大多数支持Unicode的RegExp风格和编程语言中,字符类\s
通常包括Unicode"分隔符"中的所有字符。财产\p{Z}
(正如Tim Pietcker所述);但是, Java 和 Ruby 是受欢迎的例外,\s
仅匹配[ \t\r\n\f]
。