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]*)/”で次の文字列を検索。
15x300
20x400
【結果】
フラグ | PREG_PATTERN_ORDER | PREG_SET_ORDER |
---|---|---|
$matches[0][0] | 10×200 | 10×200 |
$matches[0][1] | 15×300 | 10 |
$matches[0][2] | 20×400 | 200 |
$matches[1][0] | 10 | 15×200 |
$matches[1][1] | 15 | 15 |
$matches[1][2] | 20 | 200 |
$matches[2][0] | 200 | 20×400 |
$matches[2][1] | 300 | 20 |
$matches[2][2] | 400 | 400 |
まとめ
JavaScriptの正規表現のように「g」を指定することはできない。
単純にマッチするかどうかを調べるならばpreg_matchを使う。
検索結果を後で使うならばpreg_match_allを使う。
コメント