繁体   English   中英

Ruby正则表达式处理nbsp

[英]Ruby regexp handling of nbsp

在ruby 1.9.3中,正则表达式引擎不会将(\\ 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中,我建议使用“ 空格分隔符\\p{Zs}的Unicode字符类:

/\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字符类\\s通常包括从所述的Unicode“分离器”的属性的所有字符\\p{Z}如由Tim Pietcker提及); 但是, JavaRuby在这里是流行的例外, \\s只匹配[ \\t\\r\\n\\f]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM