文字クラスにおける日本語

広告

Rubyにおいてはマルチバイトを認識できる文字コード(u, s, e)を指定した場合には文字クラス内に全角文字を1つの文字として指定することが出来ます。

/[赤青緑]色/u

「赤」「青」「緑」はそれぞれ1つの文字として扱われますので、上記は「赤色」「青色」「緑色」のいずれかの文字列にマッチします。

ひらがな、カタカナ、漢字を表す文字クラス

文字クラスではメタ文字のハイフン(-)で範囲指定が可能です。そこでひらながとカタカナを表す文字クラスは概ね次のように記述することが出来ます。

/[ぁ-ん]/u
/[ァ-ヴ]/u

漢字を表す文字クラスは文字コードによって異なります。

/[一-龠]/u
/[亜-煕]/s

上記は文字コード表を厳密に調べたものではありません。取りこぼす漢字が含まれている可能性があります。より良い文字クラスの定義の仕方が分かりましたら更新します。

サンプルプログラム

では簡単なプログラムで確認して見ます。

test3-1.rb

#! 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 )