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

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

(2021 年 06 月 30 日公開 / 2022 年 10 月 12 日更新)

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

メタ文字(.)は任意の 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 )

広告
Profile
profile_img

著者 / TATSUO IKURA

初心者~中級者の方を対象としたプログラミング方法や開発環境の構築の解説を行うサイトの運営を行っています。