第5章 組み込み関数 / 第2回 模擬試験
PHPの正規表現関数に関する次の記述のうち、正しいものはどれか。
`preg_match()`はパターンにマッチした場合1を、マッチしなければ0を返す。
正解
`preg_replace()`は最初にマッチした箇所のみを置換する。
PHPの正規表現パターンはデリミタ(区切り文字)を必要としない。
`preg_match_all()`は最初のマッチのみを取得する。
解説
`preg_match($pattern, $subject)`は、パターンにマッチした場合は`1`、マッチしなかった場合は`0`を返します(エラー時は`false`)。`if (preg_match(...))`のように真偽値的に使えます。
他の選択肢が誤りである理由は次の通りです。
・`preg_replace()`は、既定では文字列内の「すべての」マッチ箇所を置換します。最初の1箇所だけに限定したい場合は第4引数の`$limit`に`1`を指定します。
・PHPの正規表現パターンは、`/pattern/`や`#pattern#`のように、任意の記号をデリミタとしてパターンの前後を囲む必要があります。
・`preg_match_all()`は文字列内の「すべての」マッチを取得し、マッチ数を返します(第3引数の変数にすべてのマッチが配列で格納されます)。
例:
```
preg_match('/d+/', 'abc123def', $m);
print_r($m); // ['123']
preg_match_all('/d+/', 'a1b22c333', $all);
print_r($all[0]); // ['1', '22', '333']
```
(参照: 独習PHP 第4版 第5章 組み込み関数 5.4節 正規表現(PCRE)関数 p.213〜236)