文字クラスの否定(^)

広告

文字クラスはマッチさせたい候補の文字を列挙して使いますが、列挙した文字以外の全ての文字にマッチさせることも可能です。このような場合にはメタ文字の「^」を使います。

例として「0から9」までの文字以外の文字にマッチさせたい場合には次のように記述できます。

/[^0-9]/

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

/[ab^0-9]/

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

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

/[^a-zA-Z]/

サンプルプログラム

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

test3-1.rb

#! ruby -Ku
require "kconv"

def check(str)
  if /200[^a-zA-Z]/ =~ str then
    print(Kconv.tosjis("○") + str + "¥n")
  else
    print(Kconv.tosjis("×") + str + "¥n")
  end
end

print(Kconv.tosjis("200[^a-zA-Z] にマッチするかどうか¥n¥n"))

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

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

文字クラスの否定(^)

( Written by Tatsuo Ikura )