PHPプログラミング

レシピ

文字列

正規表現の検索結果からヒットした文字列やヒット件数を取得

正規表現で文字列検索を行うと、検索にヒットしているかは返り値から確認することができます。しかしときには、検索にヒットした文字列を取得したり、ヒット件数を取得したい場合があるかもしれません。今回はその方法を解説していきます。

この記事のポイント

  • 正規表現でヒットした文字列を取得する
  • 正規表現のヒット数を取得する

目次

検索にヒットした文字(単語)を取得

正規表現の基本的な使い方については「文字列に特定の文字(単語)が含まれるか検索」をご覧ください。

preg_match関数を使うときに変数を渡すと、その変数へ検索にヒットした文字を格納してくれます。

コード例

$res = null;
$array = null;
$str = 'mouse and cat dog and dog or dog';

if( preg_match( '/dog/', $str, $array) ) {
	$res = true;
} else {
	$res = false;
}

var_dump($array);

実行結果

preg_match関数の実行結果

解説

1〜3行目では変数の初期化を行っています。
2行目の変数$arrayが検索結果を入れるための変数になります。

if文の条件式に書かれたpreg_match関数の中で、3番目のパラメータとして先ほど初期化した$arrayを渡します。
すると、検索結果を自動的に変数へ格納してくれます。

今回の例では検索対象の文字列の中に、検索文字「dog」が含まれているため、上記の出力結果となります。
ただし、preg_match関数は1件でも検索がヒットした時点でtrueと判定して終了してしまいます。
検索対象の文字列全体のヒット数までは分かりません。
そこまで含めて知りたい場合は、続いて紹介するpreg_match_all関数を使用します。

preg_match_all関数

検索対象の文字列全体を確実にチェックする関数です。
複数ヒットした場合は、ヒットした件数のデータを取得することができます。

コード例

$res = null;
$array = null;
$str = 'mouse and cat dog and dog or dog';

if( preg_match_all( '/dog/', $str, $array) ) {
	$res = true;
} else {
	$res = false;
}

var_dump($array);

実行結果

preg_match_all関数の実行結果

解説

コードの変更点はpreg_match関数preg_match_all関数にしているところのみですが、$arrayには検索対象の文字列に検索文字がヒットした数だけ値が格納されていることが分かります。
そのため、ヒット数を把握することが可能になりました。
今回は3件です。

また、値からどの文字でヒットしたかも知ることができます。
今回の例では「dog」とシンプルな単語なのであまり役に立ちませんが、もし「[0-9a-zA-Z]{2,4}」など少し複雑な正規表現を使った検索の場合に、ヒットした文字の内容が分かるため非常に便利です。

こちらの記事は役に立ちましたか?

ありがとうございます。
もしよろしければ、あわせてフィードバックや要望などをご入力ください。

ありがとうございます。
コメントを送信しました。