- 更新日: 2014年5月13日
- Ruby
Ruby の正規表現で日本語(ひらがな/カタカナ/漢字)にマッチさせる
スポンサーリンク
Ruby は鬼車という超強力な正規表現エンジンを採用しているので、正規表現で日本語のひらがな・カタカナ・漢字にマッチさせるのも簡単です。
【お知らせ】 英単語を画像イメージで楽に暗記できる辞書サイトを作りました。英語学習中の方は、ぜひご利用ください!
スポンサーリンク
日本語にマッチさせる正規表現
ひらがなの正規表現
1 2 3 |
/\p{Hiragana}/ |
カタカナの正規表現
1 2 3 |
/\p{Katakana}/ |
漢字の正規表現
1 2 3 |
/[一-龠々]/ |
漢字の正規表現は、文字クラスで “一-龠” の範囲を指定して、さらにその範囲に入っていない “々” を追加する。
日本語にマッチさせる時の落とし穴
それで、以下の正規表現を日本語の単語用に使っていたのですが、落とし穴がひとつありました。
1 |
japanese_regex = /\A(?:\p{Hiragana}|\p{Katakana}|[一-龠々])+\z/ |
1 2 3 4 5 6 |
pry(main)> japanese_regex = /\A(?:\p{Hiragana}|\p{Katakana}|[一-龠々])+\z/ => /\A(?:\p{Hiragana}|\p{Katakana}|[一-龠々])+\z/ pry(main)> "サッカー" =~ japanese_regex => nil |
なんと!マッチしません!
原因は、/\p{Hiragana}|\p{Katakana}|[一-龠々]/ が長音(伸ばす文字)にマッチしないためです。なので、完全に日本語の単語にマッチさせるには長音を正規表現に追加する必要があります。以下のように変更。
1 |
japanese_regex = /\A(?:\p{Hiragana}|\p{Katakana}|[ー-]|[一-龠々])+\z/ |
1 2 3 4 5 6 |
pry(main)> japanese_regex = /\A(?:\p{Hiragana}|\p{Katakana}|[ー-]|[一-龠々])+\z/ => /\A(?:\p{Hiragana}|\p{Katakana}|[ー-]|[一-龠々])+\z/ pry(main)> "サッカー" =~ japanese_regex => 0 |
今度はバッチシ、マッチした先頭文字の位置である “0” を返してくれました。
その他の注意点
句読点などを試した。
1 2 3 4 5 6 7 8 9 10 11 12 |
pry(main)> "、" =~ japanese_regex => nil pry(main)> "。" =~ japanese_regex => nil pry(main)> "," =~ japanese_regex => nil pry(main)> " " =~ japanese_regex # 半角スペース => nil pry(main)> " " =~ japanese_regex # 全角スペース => nil |
試しましたところ、句読点(、。)、コンマ、半角・全角スペースなどにもマッチしないので、日本語で文章単位でマッチさせる場合には、さらに工夫が必要です。
スポンサーリンク
私は以下の本で Ruby を覚えました。メタプログラミングRubyは入門を超える内容で難しめです。
<< 前の記事 : Rubyで連番の変数を動的に作成
- Ruby の関連記事
- Gemの作り方(Ruby Gem)
- ローカル開発中のgemをGemfileに書いてインストール
- 熊本地震の余震が夜に多いのは本当か?Rubyプログラムで検証してみた
- El Capitanでgemのnative extensionビルド失敗に対応
- Rubyで親クラスから子クラスの定数を参照
- MacabをRubyで使う
- rbenv/ruby-buildでRuby最新バージョンをインストール
- Rubyでクラスインスタンス変数にインスタンスメソッドからアクセス
- 距離1kmあたりの緯度・経度の度数を計算(日本・北緯35度)
- Google Maps Geocoding APIで住所から緯度・経度を取得するRubyコード
Leave Your Message!