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 )
おお、、、こうやって改めて見るとスラッシュがまぜこぜに、、、おかしくなるのがよくわかる。
対処法はデリミタをスラッシュ以外に変える
対処法はデリミタをスラッシュ以外に変えることです。
にもあるように、角括弧形式のデリミタ{ } で置き換えてみます。
// preg_match echo( 'preg_match : ' . preg_match( '{' . $site_url . '}' , $current_url ) );
つまりこういうことです。
preg_match( '{https://www.1ft-seabass.jp/}' , $current_url )
おわりに
これで、ちゃんと正規表現が通るようになりました。
それでは良きPHP Lifeを。
参考にしたURL