PHPでpreg_match関数、URLの比較してUnknown modifier '/' inエラーが出てしまう時の原因と対処法
Wordpress関連ですが、PHPでpreg_match関数、URLの比較して
Warning: preg_match() [function.preg-match]: Unknown modifier '/' in
と出てしまって、単純にもかかわらずコードが動かなくなってしまった時の原因と対処法です。
実際に問題の起きたコード
実際に問題の起きたコードは下記のコードです。
// サイトのURL
$site_url = 'http://www.1ft-seabass.jp/';
// 現在のURL 実際は動的に取得する
$current_url = 'http://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( '/http://www.1ft-seabass.jp//' , $current_url )
おお、、、こうやって改めて見るとスラッシュがまぜこぜに、、、おかしくなるのがよくわかる。
対処法はデリミタをスラッシュ以外に変える
対処法はデリミタをスラッシュ以外に変えることです。
にもあるように、角括弧形式のデリミタ{ } で置き換えてみます。
// preg_match
echo( 'preg_match : ' . preg_match( '{' . $site_url . '}' , $current_url ) );
つまりこういうことです。
preg_match( '{http://www.1ft-seabass.jp/}' , $current_url )
おわりに
これで、ちゃんと正規表現が通るようになりました。
それでは良きPHP Lifeを。
参考にしたURL