メタ文字(.)が全角文字にマッチするかどうか

メタ文字(.)は任意の 1 文字にマッチしますが、 UTF-8 など非 ASCII の文字を扱える文字コードを使用している場合は半角文字だけでなく全角文字の 1 文字にマッチします。ここでは Ruby の正規表現でメタ文字(.)が全角文字にマッチするかどうかについて解説します。

(Last modified: )

メタ文字(.)が全角文字にマッチするかどうか

メタ文字(.)は任意の 1 文字にマッチしますが、半角文字および全角文字の 1 文字のどちらもマッチします。

/a.b/

この場合、「aob」や「atb」などだけではなく「aたb」や「a東b」などにもマッチします。

なお文字コードが NONE(ASCII) の場合も同じなのですが、全角文字が含まれる文字列とマッチするかどうか調べると「warning: historical binary regexp match /.../n against UTF-8 string」が表示されます。

サンプルコード

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

# encoding: UTF-8

def check1(str)
  if /a.b/ =~ str then
    puts("○" + str)
  else
    puts("×" + str)
  end
end

def check2(str)
  if /a.b/n =~ str then
    puts("○" + str)
  else
    puts("×" + str)
  end
end

puts("/a.b/ にマッチするかどうか")

check1("aob")
check1("aあb")
check1("a東b")

puts()

puts("/a.b/n にマッチするかどうか")

check2("aob")
check2("aあb")
check2("a東b")

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

文字コードによるメタ文字(.)のマッチの違い

-- --

Ruby の正規表現でメタ文字(.)が全角文字にマッチするかどうかについて解説しました。

( Written by Tatsuo Ikura )

プロフィール画像

著者 / TATSUO IKURA

これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。