関数 preg_match

関数 preg_match は、文字列内で正規表現との一致を検索します。最初のパラメータは正規表現パターン、2番目は検索対象の文字列、3番目(オプション)は見つかった一致を格納する配列、4番目(オプション)はフラグ、5番目(オプション)は検索開始位置のオフセットを受け取ります。

構文

phppreg_match(pattern, subject, [matches], [flags], [offset]);

フラグ

フラグ 定数 説明
PREG_PATTERN_ORDER 1 結果をパターンごとにソート(デフォルト)
PREG_SET_ORDER 2 結果を一致セットごとにソート
PREG_OFFSET_CAPTURE 256 文字列内での一致位置を返す
PREG_UNMATCHED_AS_NULL 512 一致しなかったサブパターンをNULLとして返す

例

文字列に数字が含まれているか確認します:

php<?php
  $res = preg_match('/\d+/', 'abc123');
  echo $res;
?>

コード実行結果:

php1

例

文字列からすべての数字を配列として抽出します:

php<?php
  preg_match('/\d+/', 'abc123', $matches);
  var_dump($matches);
?>

コード実行結果:

php[0 => '123']

例

正規表現での名前付きキャプチャグループの使用:

php<?php
  preg_match('/(?P<name>\w+)\s+(?P<age>\d+)/', 'John 25', $matches);
  var_dump($matches);
?>

コード実行結果:

php[
  0 => 'John 25',
  'name' => 'John',
  1 => 'John',
  'age' => '25',
  2 => '25'
]

例

一致位置を取得するための PREG_OFFSET_CAPTURE フラグの使用:

php<?php
  preg_match('/\d+/', 'abc123', $matches, PREG_OFFSET_CAPTURE);
  var_dump($matches);
?>

コード実行結果:

php[
  0 => [
    0 => '123',
    1 => 3
  ]
]

例

オフセット(開始位置)を指定した検索:

php<?php
  preg_match('/\d+/', '123abc456', $matches, 0, 3);
  var_dump($matches);
?>

コード実行結果:

php[0 => '456']

例

Eメールアドレスの妥当性チェック:

php<?php
  $email = 'test@example.com';
  $res = preg_match('/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/', $email);
  echo $res ? 'Valid' : 'Invalid';
?>

コード実行結果:

php'Valid'

関連項目

  • 関数 preg_match_all,
    これは文字列内のすべての一致を検索します
  • 関数 preg_replace,
    これは正規表現に基づいた置換を実行します