Ruby正则表达式处理nbsp

时间:2012-11-08 10:59:23

标签: ruby regex ruby-2.0

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

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

2 个答案:

答案 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]