在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標準定義了許多其他分隔符,這些分隔符似乎主要用於東方語言,其中文字不一定明顯地被空白分隔。 –