preg_match関数は指定した正規表現にマッチする文字列を検索・取得します。ある文字列の中に指定の文字列があるか確認することができます。
第一引数に正規表現のパターン、第二引数に検索する文字列、第三引数に検索結果を格納する配列を指定します。第三引数は省略可能です。
検索対象文字列の中に検索文字列が見つかった場合は1を返し、見つからなかった場合は0を返します。これは検索にマッチした回数を表します。
preg_match(/正規表現パターン/, 検索対象文字列, 検索結果の配列);
ホスト名に「php.brick-plan.jp」が含まれている場合はimgタグを表示します。
<?php
if(preg_match("/php\.brick-plan\.jp/", $_SERVER['SERVER_NAME'])) {
$img = '<img src="https://php.brick-plan.jp/img/demo.png" alt="">';
echo $img;
}
?>
第一引数の正規表現内で、ピリオドは「任意の文字」を表すので「¥」でエスケープしてピリオドとして検索しています。
なお、検索に正規表現を使う必要がなければstrpos関数の方が高速です。
次に、第三引数まで指定して検索結果を表示してみます。
<?php
$html = '<div class="test">test</div>';
if(preg_match("/div/", $html, $matches)) {
print_r($matches);
}
?>
実行結果は以下になります。
Array ( [0] => div )
正規表現にマッチする文字列の「div」は2つありますが、検索結果の配列には1つしか格納されません。preg_match関数で検索できるのは最初の1つのみです。
preg_match関数をpreg_match_all関数に変更してみます。
<?php
$html = '<div class="test">test</div>';
if(preg_match_all("/div/", $html, $matches)) {
print_r($matches);
}
?>
実行結果は以下になります。
Array ( [0] => Array ( [0] => div [1] => div ) )
preg_match_all関数は正規表現にマッチする全ての文字列を検索できます。
