検索にヒットした文字(単語)を取得
今回は正規表現による文字列検索を行うpreg_match関数とpreg_match_all関数の2つの関数をみていきます。
まずは通常の正規表現でよく使用するpreg_match関数から解説します。
なお、正規表現の基本的な使い方につきましては別記事「正規表現で文字を検索する:preg_match関数」をご覧ください。
PHP コード例
$str = "Your dog and my dog are very pretty.";
$res = null;
preg_match( '/dog/', $str, $res);
var_dump($res);
出力例
array(1) { [0]=> string(3) "dog" }
1行目は検索の対象となる文字列を用意し、2行目は変数$resの初期化を行います。
preg_match関数の第3パラメータとして、先ほど初期化した$resを渡します。
この変数には、検索して一致した文字列が入ります。
上記コード例では単純に「dog」という単語を検索しているため、検索対象からこの単語が見つかったら$resに格納し、最後のvar_dump関数で出力します。
preg_match関数は、文字列検索をして一番最初にヒットした時点で検索を終了します。
つまり、該当する単語が2つ以上含まれている場合に、単語が何件含まれているかを調べることはできません。
この件数を含めて取得したい場合は、preg_match_all関数を使います。
正規表現の基本的な使い方については「文字列に特定の文字(単語)が含まれるか検索」をご覧ください。
確実に全体検索を行うpreg_match_all関数
preg_match_all関数は検索対象の文字列全体をチェックする関数です。
PHP コード例
$str = "Your dog and my dog are very pretty.";
$res = null;
var_dump(preg_match_all( '/dog/', $str, $res));
var_dump($res);
上記のコードの場合、1つ目のvar_dump関数では次のように検索ヒット数が出力されます。
出力例
int(2)
2つ目のvar_dump関数は$resの内容を出力します。
こちらの変数には該当した文字列が全て格納されています。
出力例
array(1) { [0]=> array(2) { [0]=> string(3) "dog" [1]=> string(3) "dog" } }
preg_match関数とpreg_match_all関数の使いわけについては、次のような用途のうちいずれに該当するかで判断することができます。
- 該当する文字列が1つでも存在するか ... preg_match関数を使う
- 検索対象に該当する文字列がいくつあるか確認したい ... preg_match_all関数を使う
正規表現の使いどころは多いと思いますが、まずは全体検索を行うかどうかがポイントになります。