9

Ruby 1.9.3 では、正規表現エンジンは nbsp の (\u00A0) をスペース (\s) として扱いません。これはしばしば私にとって残念なことです。

私の質問は、これは 2.0 で変更されますか? そうでない場合、ソリューションにモンキー パッチを適用する方法はありますか?

4

2 に答える 2

10

Unicode プロパティを使用します (これを機能させるには、一致するソース コード エンコーディングを宣言する必要があります)。

# encoding=utf-8 
if subject ~= /\p{Z}/
    # subject contains whitespace or other separators

または POSIX 文字クラスを使用します。

if subject ~= /[[:space:]]/

docsによると、現在および将来\sのみ一致します。[ \t\r\n\f]

于 2012-11-08T11:50:57.260 に答える
0

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 が言及)。ただし、JavaRubyはここでは一般的な例外であり\s、一致するもののみ[ \t\r\n\f]です。

于 2016-01-26T04:13:50.027 に答える