第5章 組み込み関数 / 第3回 模擬試験
PHPの正規表現における修飾子(モディファイア)に関する次の記述のうち、正しいものはどれか。
`i`修飾子を付けると、大文字・小文字を区別しないマッチングになる。
正解
`m`修飾子は、正規表現のマッチングを完全に無効化する。
修飾子はパターンの前に記述しなければならない。
PHPの正規表現では修飾子を使用できない。
解説
正規表現の`i`修飾子(例: `/pattern/i`のようにデリミタの後ろに付ける)を使うと、大文字・小文字を区別せずにマッチングを行います。
他の選択肢が誤りである理由は次の通りです。
・`m`修飾子は「複数行モード」を有効にする修飾子で、`^`と`$`が文字列全体の先頭・末尾だけでなく各行の先頭・末尾にもマッチするようになります。マッチング自体を無効化するものではありません。
・修飾子は、パターンの「前」ではなく、閉じデリミタの「後ろ」(例: `/pattern/im`)に記述します。
・PHPのPCRE関数(`preg_match()`など)では、`i`, `m`, `s`, `u`など複数の修飾子を組み合わせて使用できます。
例:
```
var_dump(preg_match('/php/i', 'I love PHP')); // 1(大文字小文字を無視してマッチ)
var_dump(preg_match('/php/', 'I love PHP')); // 0(iなしだとマッチしない)
```
(参照: 独習PHP 第4版 第5章 組み込み関数 5.4.8節 正規表現パターンの修飾子 p.226〜229)