Ruby

キーワードを全角込みの空白で区切る

More than 3 years have passed since last update.

ちょっとしたフリーワード検索を実装しようと、入力された文字列を空白で分解する場面が。

単純に次のようにすると、全角スペースがうまくいかない。

"aaa bbb ccc".split(' ')

#=> ['aaa', 'bbb', 'ccc']

"あああ いいい ううう".split(' ')
#=> ['あああ いいい ううう']

事前に文字列置換をかけたり、正規表現に全角スペースを追加したりするのも良いけど、今回は多言語仕様のアプリなんで、日本語の全角スペースをコード中に含めるのは違和感。そこでposixの空白演算子を試してみたら、うまくいった。

"あああ いいい ううう".split(/[[:blank:]]/)

#=> ['あああ', 'いいい', 'ううう']

# tabでもOK
"aaa bbb¥tccc".split(/[[:blank:]]/)
#=> ['aaa', 'bbb', 'ccc']

連続した空白も除去してしまいたければ、もうひと工夫。

"あああ  いいい ううう".split(/[[:blank:]]/)

#=> ['あああ', '', 'いいい', 'ううう']

"あああ いいい ううう".split(/[[:blank:]]+/)
#=> ['あああ', 'いいい', 'ううう']