文字クラスの中で全角文字を使用する

正規表現パターンに文字クラスを使用する場合、マルチバイトを認識できる文字コードを使用している場合は全角文字も含めることができます。ここでは Ruby の正規表現で文字クラスの中で全角文字を使用できるかどうかについて解説します。

(2021 年 06 月 30 日公開 / 2022 年 10 月 12 日更新)

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

文字コードにマルチバイトを認識できる文字コード( UTF-8 など)を設定している場合には文字クラス内に全角文字を 1 つの文字として指定することが出来ます。

/[赤青緑]色/

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

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

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

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

漢字を表す文字クラスは文字コードによって異なります。 UTF-8 の場合は次のように記述できます。

/[一-龠]/

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

サンプルコード

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

# encoding: UTF-8

def check1(str)
  if /[一-龠]+/ =~ str then
    puts("○" + str + "(" + $& + ")")
  else
    puts("×" + str)
  end
end

def check2(str)
  if /[ぁ-んァ-ヴ]+/ =~ str then
    puts("○" + str + "(" + $& + ")")
  else
    puts("×" + str)
  end
end

puts("/[一-龠]/ にマッチするかどうか")

check1("お元気ですか")
check1("こんにちは。")
check1("新年のカレンダー")

puts()

puts("/[ぁ-んァ-ヴ]/ にマッチするかどうか")

check2("お元気ですか")
check2("こんにちは。")
check2("新年のカレンダー")

下記のように実行して下さい。

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

「。」や「ー」が拾えていません。もう少し修正が必要なようです。

-- --

Ruby の正規表現で文字クラスの中で全角文字を使用できるかどうかについて解説しました。

( Written by Tatsuo Ikura )

広告
Profile
profile_img

著者 / TATSUO IKURA

初心者~中級者の方を対象としたプログラミング方法や開発環境の構築の解説を行うサイトの運営を行っています。