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

パターンで「/m修飾子」を指定すると、メタ文字(.)が改行にもマッチするようになります。ここでは Ruby の正規表現で利用可能な「/m修飾子」の使い方について解説します。

(Last modified: )

メタ文字(.)が改行にマッチする

メタ文字(.)はデフォルトでは改行以外の文字にマッチしますが、 /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行に記述されたように扱うことができます。

サンプルコード

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

# encoding: UTF-8

def check1(str)
  if / .+ / =~ str then
    puts("○" + str)
    puts("[" + $& + "]")
  else
    puts("×" + str)
  end
end

def check2(str)
  if / .+ /m =~ str then
    puts("○" + str)
    puts("[" + $& + "]")
  else
    puts("×" + str)
  end
end

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

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

puts()

puts("/ .+ /m にマッチするかどうか")

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

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

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

-- --

Ruby の正規表現で利用可能な「/m修飾子」の使い方について解説しました。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。