English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

PHP基本教程

PHP上級教程

PHP & MySQL

PHPリファレンスマニュアル

PHP preg_match()関数の用法および例

PHP 正規表現(PCRE)

preg_match関数は正規表現マッチングを実行するために使用されます。

文法

int preg_match ( string $pattern , string $subject [, array &$matches [, int $flags = 0 [, int $offset = 0 ]]] )

subjectとpatternで指定された正規表現の1つのマッチングを検索します。

パラメータ説明:

  • $pattern: 検索するパターン、文字列形式。

  • $subject: 入力文字列。

  • $matches: matchesパラメータが提供された場合、それが検索結果に詰め込まれます。$matches[0]には完全なパターンマッチングされたテキストが含まれます、$matches[1]には、最初のキャプチャ子グループにマッチしたテキストが含まれます。以降に続きます。

  • $flags: flagsは以下のマーク値に設定できます:

  • PREG_OFFSET_CAPTURE: このマークを渡した場合、各出現のマッチングが返される際に文字列オフセット(ターゲット文字列に対して)が追加されます。注意:これは、matchesパラメータに詰め込まれる配列を変更し、各要素が第0要素がマッチングされた文字列、第1要素は、ターゲット文字列subject内のマッチング文字列のオフセットです。

  • offset: 通常、検索はターゲット文字列の開始位置から行われます。オプションのパラメータoffsetは、ターゲット文字列の特定の未知の開始位置から検索を指定するために使用されます(単位はバイトです)。

返り値

patternのマッチング回数を返します。その値は0回(マッチングなし)または 1 次に、preg_match()は最初のマッチング後に検索を停止します。preg_match_all()は異なり、subjectの終わりまで検索し続けます。エラーが発生した場合、preg_match()はFALSEを返します。

オンラインの例

<?php
//パターン区切り記号の後の"i"は、大小写を区別しない検索であることを示しています
if (preg_match("/php/i", "PHPはウェブスクリプト言語の選択です。")) {
    echo "マッチングされた文字列 php。";
} else {
    echo "マッチングされた文字列 php。";
}
?>

以下の結果が表示されます:

マッチングされた文字列 php。

<?php
/* パターン内の\bマークは単語境界を示し、独立した単語「web」がマッチし、以下のようにマッチしません
 * 「webbing」や「cobweb」などの単語の一部 */
if (preg_match("/\bweb\b/i", "PHPはウェブスクリプト言語の選択です。")) {
    echo "マッチングされた文字列が見つかりました。\n";
} else {
    echo "マッチングされた文字列が見つかりません。\n";
}
if (preg_match("/\bweb\b/i", "PHPは選択されたウェブスクリプト言語です。")) {
    echo "マッチングされた文字列が見つかりました。\n";
} else {
    echo "マッチングされた文字列が見つかりません。\n";
}
?>

以下の結果が表示されます:

マッチングされた文字列が見つかりました。
マッチングされた文字列が見つかりません。

<?php
// URLからホスト名を取得
preg_match('@^(?:http://)?([^/]+)@i',
    "http://ja.oldtoolbag.com/index.html", $matches);
$host = $matches[1;
// ホスト名の後半部分を取得
preg_match('/[^.]+\.[^.]+$/', $host, $matches);
echo "ドメイン名は: {$matches[0]}\n";
?>

以下の結果が表示されます:

ドメイン名は: oldtoolbag.com

<?php
$str = 'foobar: 2008';
preg_match('/(?P<name>\w+): (?P<digit>\d+)/', $str, $matches);
/* 以下の例はphp 5.2.2(pcre 7.0)または更新版で動作しますが、後方互換性のために、上記の方法が推奨されます。 */
// preg_match('/(?<name>\w+): (?<digit>\d+)/', $str, $matches);
print_r($matches);
?>

以下の結果が表示されます:

配列
(
    [0] => foobar: 2008
    [name] => foobar
    [1] => foobar
    [digit] => 2008
    [2] => 2008
)

PHP 正規表現(PCRE)