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

広告

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

例として「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までのいずれかの文字に一致する文字クラスです。

サンプルプログラム

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

test2-1.rb

#! ruby -Ku
require "kconv"

def check(str)
  if /0x[0-9a-f][0-9a-f]/ =~ str then
    print(Kconv.tosjis("○") + str + "¥n")
  else
    print(Kconv.tosjis("×") + str + "¥n")
  end
end

print(Kconv.tosjis("0x[0-9a-f][0-9a-f] にマッチするかどうか¥n¥n"))

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

上記のプログラムを「test2-1.rb」として保存します。文字コードはUTF-8です。そして下記のように実行して下さい。

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

( Written by Tatsuo Ikura )