以下の内容はhttp://sonic64.com/2003-03-25.htmlより取得しました。


Landscape トップページ | < 前の日 2003-03-24 2003-03-25 次の日 2003-03-26 >

Landscape - エンジニアのメモ 2003-03-25

Perl の正規表現のオプション m と s


* Perl の正規表現のオプション m と s

この記事の直リンクURL: Permlink | この記事が属するカテゴリ: [Perl]

パターンマッチのオプションをちょっとおさらい。
試した環境は TurboLinux 6.5 Server の perl version 5.005_03 built for i386-linux

perldoc perlre も参考になる。

- m オプション: $str を複数行として扱う。

m オプションを必要とするのは、文字列中に改行文字を含み、
かつ正規表現中に ^ や $ を使って先頭や末尾を指定しているとき。
それ以外の時は意味がないと思われる。

以下の例では、m を付けるとマッチ、付けないとアンマッチ。
$str =~ "string\npattern\nptt\nend";
$str =~ /^pattern/m;

- s オプション: 文字列を単数行として扱う。・・・と書くとわかりにくいかな。

. を改行文字にもマッチさせるようになる。
普段は . は改行文字にはマッチしないが、s オプションによりマッチするようになる。
改行文字とは \n の事のようだ。\r は オプションの有無にかかわらずマッチした。

以下の例では、s を付けるとマッチ、付けないとアンマッチ。
$str =~ "string\npattern\nptt\nend";
$str =~ /ring.*pattern/s;

- m オプションと s オプションを両方指定すると・・・?

m オプションにより、^ や $ の指定が有効になる。
s オプションにより、. は\n にマッチする。

以下のようなときは、m と s 両方のオプションを指定したときだけマッチする。
$str =~ "string\npattern\nptt\nend";
$str =~ /ing.*^pattern/ms
「ing という 文字列の後に、0個以上の文字列(改行も文字として扱う)が続き、
pattern という文字が続く。ただし、pattern は行の先頭でなければならないので、
pattern の直前は改行文字。」にマッチ。
こんなマッチをさせたい事って、あんまりないかな。




以上の内容はhttp://sonic64.com/2003-03-25.htmlより取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14