メタ文字(.)が改行にマッチする(/m修飾子)

広告

メタ文字(.)はデフォルトでは改行以外の文字にマッチしますが、「/m修飾子」を指定するとメタ文字(.)が改行にもマッチするようになります。書式は次の通りです。

/パターン/m

具体的な例で考えてみます。

/ .+ / =~ "One Hamburger¥nand a Coffee please"

「/ .+ /」は空白で始まり任意の文字が1個以上続き空白で終わる文字列にマッチします。この時「.」は改行以外の任意の文字にマッチするため今回は「 a Coffee 」にマッチします。

同じ正規表現に対して「/m修飾子」を付けてみます。

/ .+ /m =~ "One Hamburger¥nand a Coffee please"

「/ .+ /m」は空白で始まり任意の文字が1個以上続き空白で終わる文字列にマッチします。この時「.」は改行にもマッチするため今回は「 Hamburger¥nand a Coffee 」にマッチします。

このように「/m修飾子」を指定することで、複数行にわたる文字列もあたかも1行に記述されたように扱うことが出来ます。

サンプルプログラム

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

test4-1.rb

#! ruby -Ku
require "kconv"

def check1(str)
  if / .+ / =~ str then
    print(Kconv.tosjis("○") + str + "¥n")
    print(Kconv.tosjis("[" + $& + "]") + "¥n")
  else
    print(Kconv.tosjis("×") + str + "¥n")
  end
end

def check2(str)
  if / .+ /m =~ str then
    print(Kconv.tosjis("○") + str + "¥n")
    print(Kconv.tosjis("[" + $& + "]") + "¥n")
  else
    print(Kconv.tosjis("×") + str + "¥n")
  end
end

print(Kconv.tosjis("/ .+ / にマッチするかどうか¥n¥n"))

check1("One Hamburger¥nand a Coffee please")

print("¥n")
print(Kconv.tosjis("/ .+ /m にマッチするかどうか¥n¥n"))

check2("One Hamburger¥nand a Coffee please")

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

メタ文字(.)が改行にマッチする(/m修飾子)

( Written by Tatsuo Ikura )