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:]]/
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 文字のプロパティの詳細については、Ruby のドキュメントを参照してください。
注: 入力文字列が有効な UTF-8 エンコーディングであることを確認してください。ISO-8859-1 (Latin1) の "\xA0" など、他のエンコーディングにも非改行スペースがあります。「改行なしスペース」の詳細。
参考までに: Unicode をサポートするほとんどの RegExp フレーバーとプログラミング言語で\s
は、通常、文字クラスには Unicode の "separator" プロパティのすべての文字が含まれます\p{Z}
(Tim Pietcker が言及)。ただし、JavaとRubyはここでは一般的な例外であり\s
、一致するもののみ[ \t\r\n\f]
です。