文字クラスで連続した文字を簡潔に指定する(-)

文字クラスを使用する場合、マッチさせたい文字をすべて列挙します。列挙する文字ばバラバラの場合は一つ一つ記述するしかありませんが、例えば数字の「0から9」や文字の「aからz」などのように連続した文字を指定したい場合があります。このような場合にはメタ文字のハイフン(-)を使い範囲指定の形式で記述できます。ここでは Ruby の正規表現で文字クラスで連続した文字を簡潔に指定する方法について解説します。

(Last modified: )

文字クラスで連続した文字を簡潔に指定する

メタ文字の - を使用すると連続した文字を表すことができます。例えば「0から9」までの文字を文字クラスの中で指定する場合には次のように記述できます。

/[0-9]/

上記は「0」「-」「9」と言う3つの候補ではありません。ブラケット([])の中でハイフン(-)を使用した場合はハイフンはメタ文字としての意味を持ち、ハイフンの左側から右側までの連続した文字を記述した場合と同じです。よって上記は次のように記述した場合と同じです。

/[0123456789]/

同じようにアルファベットの「aからz」までを全て文字クラスの中で指定する場合は次のどちらの記述方法でも同じ結果となります。

/[a-z]/
/[abcdefghijklmnopqrstuvwxyz]/

大文字のアルファベットについても同様です。

/[A-Z]/
/[ABCDEFGHIJKLMNOPQRSTUVWXYZ]/

今回は「0から9」や「aからz」などの先頭から最後までの場合で確認しましたが、「3から7」とか「dからm」などのような場合でも同じ記述方法で指定できます。

/[3-7]/
/[d-m]/

また範囲での指定に加えて他の文字を追加して指定することも可能です。

/[0-9ABCDEF]/
/[0123456789ABCDEF]/

上記はどちらも0から9そしてAからFまでのいずれかの文字に一致する文字クラスです。

範囲を複数指定する

文字クラスの中には文字と範囲を組み合わせる事ができるように、複数の範囲を記述することが可能です。

/[0-9a-zA-z]/

上記は 0 から 9 、 a から z 、 A から Z までのいずれかの文字に一致する文字クラスです。

サンプルコード

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

# encoding: UTF-8

def check(str)
  if /0x[0-9a-f][0-9a-f]/ =~ str then
    puts("○" + str)
  else
    puts("×" + str)
  end
end

puts("0x[0-9a-f][0-9a-f] にマッチするかどうか")

check("0x08")
check("0xa7")
check("0xfc")
check("0xA7")
check("0x5Z")

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

連続した文字の指定(-)

-- --

Ruby の正規表現で文字クラスで連続した文字を簡潔に指定する方法について解説しました。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。