preg_match() に変数を入れたら”/”でエラーが出てしまう場合の解決法 → Warning: preg_match() [function.preg-match]: Unknown modifier

In: php

9 3月 2013
Warning: preg_match() [function.preg-match]: Unknown modifier ‘W’ in /home/dacelo/html/DocumentRoot/preg.php on line 104

preg_matchで処理をしている部分で、上記のようなエラーが出てしまいまして。
ここには、他のプロセスから変数で持ってきた文字列をチェックしているんですが、これまではうまくいっていたのに、なんでだろう…?
問題の変数を調べてみるとこんな値でした。

「野球/WBC」

ああ、なるほど。普通に文字列としていれる場合は
‘/野球\/WBC/’と、スラッシュをエスケープするところですが、変数で渡しているのでこれが出来ない。
こういう場合、二つの解決方法があります。

1.変数に関数preg_quote()を通す

preg_quoteという関数をフィルターとして通すと、preg正規表現用にエスケープしてくれます。

使用例

$hoge = preg_quote($hoge);

これで、$hogeの中にスラッシュ等が入っていても大丈夫。

2.デリミタを{}にする

こっちのほうが手っ取り早いですね。
preg_match、preg_replaceのパターン表記は//を使うのが普通です。

<?php
$subject = "abcdef";
$pattern = '/^def/';
preg_match($pattern, substr($subject,3), $matches, PREG_OFFSET_CAPTURE);
print_r($matches);
?>

が、{}も使えるんですよね。

使用例

<?php
$subject = "abcdef";
$pattern = '{^def}';
preg_match($pattern, substr($subject,3), $matches, PREG_OFFSET_CAPTURE);
print_r($matches);
?>

以上、preg_match、preg_replaceで発生する、変数のエスケープに関する2つの解決方法でした。

広告

コメント

Comment Form

About this blog

ここは、SE見習いである私ことdaceloが、日夜習得していくシステム関連の備忘録、phpやWordPressTipsのネタ、あるいはSEOやWebマーケティング関連の雑感を投稿するブログです。 平日は大体毎日投稿しています。土日は休業日です。

カテゴリー

カテゴリー

アーカイブ