weblog of key_amb

主にIT関連の技術メモ

正規表現の一部にオプションを適用する

正規表現で大文字小文字を無視したい場合、/<pattern>/i のように指定することが多いと思います。 Perl なら次のような雰囲気です。

my $text = 'HogeHoge';
if ($text =~ /hoge/i) {
    :
}

が、時と場合によっては正規表現の一部で大文字小文字を無視したいようなこともあるかもしれません。
そんなときに使えるのが部分オプションの構文です。

今回の場合、(?i:<pattern>) とすればよいです。
上の例は次のように書き直せます。

my $text = 'HogeHoge';
if ($text =~ /(?i:hoge)/) {
    :
}

この例だとあまり使うメリットはないですが、役に立つケースもあると思います。

部分オプション構文の一般的な書き方としては、以下のようになります。

(?on-off:<pattern>)

on に有効化したいオプション、off に無効化したいオプションを書きます。 perlre - Perl 正規表現 - perldoc.jp によると、Perl 5.10 では i, m, s, x オプションを使用できます。

また、(?on-off)<pattern> という書き方もできます。

こちらの記法の詳細については、上記リンク先をご覧ください。

参考