[Ruby] Ruby で半角スペースと全角スペースをマッチさせる正規表現いろいろ

memo.

スペースを hoge に置換します。

[1] pry(main)> str = "山田 太郎,山田 太郎,山田 太郎"
=> "山田 太郎,山田 太郎,山田 太郎"
[2] pry(main)> str.gsub(/\s/, 'hoge')
=> "山田 太郎,山田hoge太郎,山田 太郎"

全角スペース \u3000 が混じっていました。

[3] pry(main)> str.gsub(/ /, 'hoge')
=> "山田hoge太郎,山田 太郎,山田hoge太郎"

なので「半角スペース or 全角スペース」として \s|  を指定します。

[4] pry(main)> str.gsub(/\s| /, 'hoge')
=> "山田hoge太郎,山田hoge太郎,山田hoge太郎"

リファレンス

Unicode プロパティによる文字クラス指定。
\p{blank}

[5] pry(main)> str.gsub(/\p{blank}/, 'hoge')
=> "山田hoge太郎,山田hoge太郎,山田hoge太郎"
[6] pry(main)> /\p{blank}/.match("\u3000")
=> #<matchData " ">

POSIX 文字クラス指定。
[[:blank:]]

[7] pry(main)> str.gsub(/[[:blank:]]/, 'hoge')
=> "山田hoge太郎,山田hoge太郎,山田hoge太郎"
[8] pry(main)> /[[:blank:]]/.match("\u3000")
=> #<matchData " ">