preg_matchとpreg_match_all

Pocket

PHPには正規表現で文字列を検索するためのpreg_matchとpreg_match_allという関数があります。
これらについてまとめてみました。

preg_match

preg_match(パターン,文字列,結果)

マッチした回数を返す。0また1となる。
つまり複数回の検索はしないため「g」を指定するとエラー。

$matches[0][0] : マッチした部分全体
$matches[0][1] : マッチした部分のうち1番目のサブパターンの配列
$matches[0][2] : マッチした部分のうち2番目のサブパターンの配列

preg_match_all

preg_match_all(パターン,文字列,結果,フラグ)

マッチした回数を返す。
必ず複数回の検索をするため「g」を指定するとエラー。

フラグ「PREG_PATTERN_ORDER」
$matches[0][0] : 1回目にマッチした部分全体
$matches[0][1] : 2回目にマッチした部分全体
$matches[1][0] : 1回目にマッチした部分のうち1番目のサブパターンの配列
$matches[1][1] : 2回目にマッチした部分のうち1番目のサブパターンの配列

フラグ「PREG_SET_ORDER」
$matches[0][0] : 1回目にマッチした部分全体
$matches[0][1] : 1回目にマッチした部分のうち1番目のサブパターンの配列
$matches[1][0] : 2回目にマッチした部分全体
$matches[1][1] : 2回目にマッチした部分のうち1番目のサブパターンの配列

【使用例】
パターン"/([0-9]*)x([0-9]*)/"で次の文字列を検索。

10x200
15x300
20x400

【結果】

フラグ PREG_PATTERN_ORDER PREG_SET_ORDER
$matches[0][0] 10x200 10x200
$matches[0][1] 15x300 10
$matches[0][2] 20x400 200
$matches[1][0] 10 15x200
$matches[1][1] 15 15
$matches[1][2] 20 200
$matches[2][0] 200 20x400
$matches[2][1] 300 20
$matches[2][2] 400 400

まとめ

JavaScriptの正規表現のように「g」を指定することはできない。
単純にマッチするかどうかを調べるならばpreg_matchを使う。
検索結果を後で使うならばpreg_match_allを使う。

[ 2012年9月26日 | カテゴリー: PHP | タグ: , ]

« | »

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

送信してください。


タグ

カテゴリー

最近の投稿

最近のコメント

固定ページ

アーカイブ

stabucky

写真

メタ情報