定義と使い方
- PHPバージョン
- 4+
preg_match()関数は、
指定された正規表現パターンを使用して、文字列内に一致(match)する部分を検索します。
特徴
- 一致するパターンが文字列内で最初に検出された時点で検索を中断し、
1を返します。 - 一致するパターンが見つからない場合は
0を返します。 - エラーが発生した場合は
falseを返します。 - メールアドレス、電話番号、URLなどの特定パターンの文字列を検証する際によく使用されます。
- 文字列内から特定のパターンを検索したり、文字列から特定の形式のデータを抽出したりする用途にも使用されます。
基本例
$email = "codingeverybody@example.com";
$pattern = "/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/";
if (preg_match($pattern, $email)) {
echo 'メールアドレスは正しい形式です。';
} else {
echo 'メールアドレスは正しい形式ではありません。';
}
// 出力: 'メールアドレスは正しい形式です。'
文字列内で正規表現を使用して特定のパターンを検索し、別の文字列に置き換えるには、preg_replace()関数を使用してください。
構文
preg_match(
string $pattern,
string $subject,
array &$matches = null,
int $flags = 0,
int $offset = 0
): int|false
/* preg_match(
正規表現パターン,
検索対象となる文字列,
一致した部分を格納する配列[,
追加設定を指定するフラグ[,
検索を開始する文字列内のオフセット]]
);
*/
引数
$pattern |
必須。検索する正規表現パターンです。 |
|---|---|
$subject |
必須。検索対象となる文字列です。 |
&$matches |
オプション。正規表現パターンに一致した結果を格納する配列を指定します。 この配列は関数呼び出し後に値が設定されます。参照変数です。
|
$flags |
オプション。追加の設定を指定するフラグです。 以下のフラグを使用できます。
|
$offset |
オプション。検索を開始する文字列内のオフセットです。この値は整数で指定し、指定しない場合はデフォルト値の0から開始します。 |
戻り値
一致するパターンが文字列内で最初に検出された時点で検索を中断し、1を返します。
一致するパターンが見つからない場合は0を返します。
エラーが発生した場合はfalseを返します。
この関数と類似したpreg_match_all()関数は、指定された正規表現パターンを使用して、文字列内で一致するすべての部分(match all)を検索する関数です。
変更履歴
| バージョン | 説明 |
|---|---|
| 7.2.0 | 現在では、$flags引数の値としてPREG_UNMATCHED_AS_NULLフラグを使用できます。 |
例
preg_match()関数の便利な例です。
数字の抽出
$text = '価格は500ウォンです。';
$pattern = "/\d+/";
if (preg_match($pattern, $text, $matches)) {
echo '見つかった数字: ' . $matches[0];
} else {
echo '数字が見つかりません。';
}
// 出力: '見つかった数字: 500'
URLからドメインを抽出
$url = 'https://www.example.com/page';
$pattern = "/https:\/\/(www\.)?([a-zA-Z0-9.-]+)\.([a-zA-Z]{2,6})\/([a-zA-Z0-9.-\/]*)/";
if (preg_match($pattern, $url, $matches)) {
$domain = $matches[2];
echo '抽出されたドメイン: ' . $domain;
} else {
echo 'ドメインが見つかりません。';
}
// 出力: '抽出されたドメイン: example'
電話番号の抽出
$text = '文字列内では電話番号が090-1234-5678のように表記される場合があります。';
$pattern = "/\b(?:\d{2,3}[-.])?\d{3,4}[-.]\d{4}\b/";
if (preg_match($pattern, $text, $matches)) {
$phoneNumber = $matches[0];
echo '抽出された電話番号: ' . $phoneNumber;
} else {
echo '電話番号が見つかりません。';
}
// 出力: '抽出された電話番号: 090-1234-5678'
注意点
正規表現が正しいかどうかを確認する必要があります。誤った正規表現を使用すると、予期しない結果が発生する可能性があります。
基本的にpreg_match()関数は大文字と小文字を区別します。大文字と小文字を区別したくない場合は、正規表現に/iフラグを追加してください。
$text = 'Hello, World!';
$pattern = "/hello/i";
if (preg_match($pattern, $text, $matches)) {
echo '大文字と小文字を区別せずに一致する文字列が見つかりました: ' . $matches[0];
} else {
echo '一致する文字列が見つかりません。';
}
// 出力: '大文字と小文字を区別せずに一致する文字列が見つかりました: Hello'
補足説明
strpos()関数は、文字列の中から引数として渡された文字列を検索し、最初に見つかった(出現した)位置のインデックスを返す関数です。引数として渡された文字列が見つからない場合はfalseを返します。
$str = 'Hello, World!';
$substring = 'Hello';
$pos = strpos($str, $substring);
if ($pos === false) {
echo "文字列内に'Hello'が見つかりません。";
} else {
echo "文字列内に'Hello'が含まれています。";
}
// 出力: "文字列内に'Hello'が含まれています。"
関連項目
- PHP strpos()関数:特定の文字列の最初の出現位置を探す
- PHP stripos()関数:大文字と小文字を区別せずに特定の文字列が最初に出現する位置を検索
- PHP mb_strpos()関数:strpos()の日本語対応機能を提供
- PHP mb_stripos()関数:stripos()の日本語対応機能を提供
- PHP str_contains()関数:大文字と小文字を区別して特定の文字列の含有を確認
- PHP substr()関数:文字列を切り取って抽出する
- PHP mb_substr()関数:substr() による日本語の文字化けを解消する方法
- PHP preg_replace()関数:正規表現で文字列を置換する
- PHP str_replace()関数:文字列を別の文字列に置き換える