[英]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提及); 但是, Java和Ruby在这里是流行的例外, \\s
只匹配[ \\t\\r\\n\\f]
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.