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

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

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

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

メタ文字(.)はデフォルトでは改行以外の文字にマッチしますが、 /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

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