- Home ›
- Ruby正規表現の使い方 ›
- 正規表現のオプション修飾子 ›
- HERE
メタ文字(.)が改行にマッチする(/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行に記述されたように扱うことが出来ます。
サンプルプログラム
では簡単なプログラムで確認して見ます。
#! 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です。そして下記のように実行して下さい。
( Written by Tatsuo Ikura )