preg_match

(PHP 3 >= 3.0.9, PHP 4, PHP 5)

preg_match -- 正規表現検索を行う

説明

mixed preg_match ( string pattern, string subject [, array &matches [, int flags [, int offset]]] )

patternで指定した正規表現により subjectを検索します。

matchesが指定された場合、検索結果が代入されます。 $matches[0]はパターン全体にマッチしたテキストが代入され、 $matches[1]は最初の括弧付きのサブパターンにマッチしたテキスト が代入され、といったようになります。

flagsには以下のフラグを指定できます。

PREG_OFFSET_CAPTURE

このフラグが設定された場合、マッチする度に付随する文字列のオフ セットも返されます。これにより、返り値は配列となり、その各要素 はマッチした文字列を要素0subjectの中でのその文字列オフセットを要 素1とする配列となることに注意してください。 このフラグは、PHP 4.3.0 以降で利用可能です。

flagsパラメータは、PHP 4.3.0 以降で利用可能です。

通常、探索は対象文字列の先頭から開始されます。 オプションのパラメータoffsetは、検索の開始を始める 場所として別の位置を指定するために使用けいます。 offsetパラメータは、 PHP 4.3.3以降で使用可能です。

注意: offset は、 substr($subject, $offset)preg_match_all()の対象文字列の場所に指定するのと 等価ではありません。 これは、pattern には、 ^, $ または (?<=x)のようなアサーションを含めることができる ためです。 以下の比較を行ってみてください。

<?php
$subject
= "abcdef";
$pattern = '/^def/';
preg_match($pattern, $subject, $matches, PREG_OFFSET_CAPTURE, 3);
print_r($matches);
?>

上の例の出力は以下となります:

Array
(
)

一方、この例では、

<?php
$subject
= "abcdef";
$pattern = '/^def/';
preg_match($pattern, substr($subject,3), $matches, PREG_OFFSET_CAPTURE);
print_r($matches);
?>

出力は以下のようになります。

Array
(
    [0] => Array
        (
            [0] => def
            [1] => 0
        )

)

preg_match()は、pattern がマッチした回数を返します。これは、0回(マッチせず)または1回となり ます。これは、最初にマッチした時点でpreg_match() は検索を止めるためです。逆にpreg_match_all()は、 subjectの終わりまで検索を続けます。 preg_match()は、エラーが発生した場合にFALSEを 返します。

ティップ: Do not use preg_match() if you only want to check if one string is contained in another string. Use strpos() or strstr() instead as they will be faster.

例 1. 文字列"php"を探す

<?php
// パラメータのデリミタの後の"i"は大文字小文字を区別しない検索を示します
if (preg_match("/php/i", "PHP is the web scripting language of choice.")) {
    echo
"A match was found.";
} else {
    echo
"A match was not found.";
}
?>

例 2. 単語"web"を探す

<?php
/* パターン内の\bは単語の境界を示します。このため、独立した単語の
*  "web"にのみマッチし、"webbing" または "cobweb"のような単語の一部にはマッチしません */
if (preg_match("/\bweb\b/i", "PHP is the web scripting language of choice.")) {
    echo
"A match was found.";
} else {
    echo
"A match was not found.";
}

if (
preg_match("/\bweb\b/i", "PHP is the website scripting language of choice.")) {
    echo
"A match was found.";
} else {
    echo
"A match was not found.";
}
?>

例 3. URLからドメイン名を得る

<?php
// get host name from URL
preg_match("/^(http:\/\/)?([^\/]+)/i",
    
"http://www.php.net/index.html", $matches);
$host = $matches[2];

// get last two segments of host name
preg_match("/[^\.\/]+\.[^\.\/]+$/", $host, $matches);
echo
"domain name is: {$matches[0]}\n";
?>

この例の出力は以下となります。

domain name is: php.net

preg_match_all(), preg_replace(), preg_split()も参照ください。