文字クラスで列挙した文字以外とマッチする

文字クラスはマッチさせたい候補の文字を列挙して使いますが、列挙した文字以外の全ての文字にマッチさせることも可能です。このような場合には文字クラスの先頭にメタ文字の「^」を記述します。ここでは Ruby の正規表現で文字クラスで列挙した文字以外とマッチするパターンを作成する方法について解説します。

(Last modified: )

文字クラスの否定

文字クラスにメタ文字の ^ を使用するとを文字クラスを否定することができます。例えば「0から9」までの文字以外の文字にマッチさせたい場合には次のように記述できます。

/[^0-9]/

否定を使う場合には必ず文字クラスの先頭に ^ を記述します。文字クラスの途中に ^ が含まれていた場合は否定にはなりません。その為、 1 つの文字クラスの中でマッチさせたい候補とマッチさせたく無い候補を同時に列挙することは出来ません。文字クラスの中に記述された全ての文字の否定となります。

/[ab^0-9]/

例えば上記では「a」「b」又は「0から9」以外、と言う意味ではなく、「a」「b」「^」「0から9」の文字クラスです。

否定「^」はそれ以降に記述された文字の候補以外ということになりますので下記の場合は「a-z」及び「A-Z」以外の全ての文字を表す文字クラスとなります。

/[^a-zA-Z]/
サンプルコード

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

# encoding: UTF-8

def check(str)
  if /200[^a-zA-Z]/ =~ str then
    puts("○" + str)
  else
    puts("×" + str)
  end
end

puts("200[^a-zA-Z] にマッチするかどうか")

check("200")
check("2007")
check("200!")
check("200b")
check("200A")

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

文字クラスの否定(^)

-- --

Ruby の正規表現で文字クラスで列挙した文字以外とマッチするパターンを作成する方法について解説しました。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

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