PR

[PHP]preg_matchで正規表現に変数を使う場合のエラー回避方法

スポンサーリンク

正規表現で合致するものを探すのに便利なpreg_match関数。

これの検索パターンに変数や配列を使うと、ますます便利なんだけど、結構エラー出たりするんだよね(´;ェ;`)

ちなみに、よくやる間違いとして、以下は割と有名(?)っぽい。

if(preg_match($hoge1,$hoge2))

 

これだと、デリミタがないので正規表現とみなされないんだと。

 

なので、上記に気を付けてコード書いてみたんだけど、結局以下のようなコードで以下のエラーが出た!

▼コード

$hoge1 = "example\.com";
$hoge2 = "http://example.com/aaa/bbb/";

if(preg_match('/'.$hoge1.'/',$hoge2)){
	echo "合致!";
}

▼エラー
Warning: preg_match(): Unknown modifier 'r' in ~

 

よくわ分かんなかったけど色々調べてみると、これ、どうやら検索対象がURLだった事で、バックスラッシュとデリミタが喧嘩したのが原因みたい。

なので、以下のようにデリミタを波括弧({})にしたところ解決した。

▼コード

$hoge1 = "example\.com";
$hoge2 = "http://example.com/aaa/bbb/";

if(preg_match('{'.$hoge1.'}',$hoge2)){
	echo "合致!";
}

コメント