%rを使ったパターンの定義

広告

正規表現オブジェクトを作成する時に「/パターン/」の形式で作成が可能でしたが、パターンの中にスラッシュ「/」が多く含まれる場合には「/」を都度エスケープする必要が出てきます。

このような場合に正規表現オブジェクトの別の作成方法が用意されています。書式は次の通りです。

%r{パターン}

「%r」で始まり、対になった区切り文字で文字の集合を囲うことで文字列を作成できます。区切り文字は「{}」の他に次のようなものが使用できます。

%r{パターン}
%r[パターン]
%r(パターン)
%r<パターン>

また上記以外にも英数字とスペースを除いた文字も使用できます。この場合は同じ文字を使って囲います。

%r|パターン|
%r!パターン!
%r*パターン*

この形式で正規表現オブジェクトを作成した場合には、パターン内に「/」が含まれていてもエスケープは不要ですが、逆に区切り文字に使用した文字がパターン内で現れる場合にはエスケープが必要となります。通常はパターン内で使用されない区切り文字を使ってパターンを囲います。

サンプルプログラム

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

test6-1.rb

#! ruby -Ku
require "kconv"

def check(str)
  print(Kconv.tosjis(str + " は img/ に"))

  if %r!img/! =~ str then
    print(Kconv.tosjis("マッチします¥n"))
  else
    print(Kconv.tosjis("マッチしません¥n"))
  end
end

check("img/a.png")
check("/usr/local/bin")
check("book/img/local")

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

%rを使ったパターンの定義

( Written by Tatsuo Ikura )