- Home ›
- Ruby正規表現の使い方 ›
- Ruby正規表現における日本語の扱い ›
- HERE
文字クラスにおける日本語
広告
Rubyにおいてはマルチバイトを認識できる文字コード(u, s, e)を指定した場合には文字クラス内に全角文字を1つの文字として指定することが出来ます。
/[赤青緑]色/u
「赤」「青」「緑」はそれぞれ1つの文字として扱われますので、上記は「赤色」「青色」「緑色」のいずれかの文字列にマッチします。
ひらがな、カタカナ、漢字を表す文字クラス
文字クラスではメタ文字のハイフン(-)で範囲指定が可能です。そこでひらながとカタカナを表す文字クラスは概ね次のように記述することが出来ます。
/[ぁ-ん]/u /[ァ-ヴ]/u
漢字を表す文字クラスは文字コードによって異なります。
/[一-龠]/u /[亜-煕]/s
上記は文字コード表を厳密に調べたものではありません。取りこぼす漢字が含まれている可能性があります。より良い文字クラスの定義の仕方が分かりましたら更新します。
サンプルプログラム
では簡単なプログラムで確認して見ます。
#! ruby -Ku require "kconv" def check1(str) if /[一-龠]+/u =~ str then print(Kconv.tosjis("○" + str + "(" + $& + ")¥n")) else print(Kconv.tosjis("×" + str + "¥n")) end end def check2(str) if /[ぁ-んァ-ヴ]+/u =~ str then print(Kconv.tosjis("○" + str + "(" + $& + ")¥n")) else print(Kconv.tosjis("×" + str + "¥n")) end end print(Kconv.tosjis("/[一-龠]/u にマッチするかどうか¥n¥n")) check1("明日は雨です") check1("こんにちは。") check1("新年のカレンダー") print("¥n") print(Kconv.tosjis("/[ぁ-んァ-ヴ]/u にマッチするかどうか¥n¥n")) check2("明日は雨です") check2("こんにちは。") check2("新年のカレンダー")
上記のプログラムを「test3-1.rb」として保存します。文字コードはUTF-8です。そして下記のように実行して下さい。
「。」や「ー」が拾えていません。もう少し修正が必要なようです。
( Written by Tatsuo Ikura )