PHPでpreg_match関数、URLの比較してUnknown modifier ‘/’ inエラーが出てしまう時の原因と対処法

WordPress関連ですが、PHPでpreg_match関数、URLの比較して

Warning: preg_match() [function.preg-match]: Unknown modifier ‘/’ in

と出てしまって、単純にもかかわらずコードが動かなくなってしまった時の原因と対処法です。

実際に問題の起きたコード

実際に問題の起きたコードは下記のコードです。

// サイトのURL
$site_url = 'https://www.1ft-seabass.jp/';
// 現在のURL 実際は動的に取得する
$current_url = 'https://www.1ft-seabass.jp/memo/';
// preg_match 
echo( 'preg_match : ' . preg_match( '/' . $site_url . '/' , $current_url ) );

原因はスラッシュをデリミタに使っているから

原因はデリミタとして使っているスラッシュがURLの文字と混ざっているのでおかしくなっているようです。

上記の場合、具体的にはこんな感じですね。

preg_match( '/' . $site_url . '/' , $current_url )

 ↓

preg_match( '/https://www.1ft-seabass.jp//' , $current_url )

おお、、、こうやって改めて見るとスラッシュがまぜこぜに、、、おかしくなるのがよくわかる。

対処法はデリミタをスラッシュ以外に変える

対処法はデリミタをスラッシュ以外に変えることです。

PHP: デリミタ – Manual

にもあるように、角括弧形式のデリミタ{ } で置き換えてみます。

// preg_match 
echo( 'preg_match : ' . preg_match( '{' . $site_url . '}' , $current_url ) );

つまりこういうことです。

preg_match( '{https://www.1ft-seabass.jp/}' , $current_url )

おわりに

これで、ちゃんと正規表現が通るようになりました。

それでは良きPHP Lifeを。

参考にしたURL

正規表現とデリミタとエスケープ – 徒書

PHP の正規表現 – Techlib