web-dev-qa-db-ja.com

ereg()をpreg_match()に変更するときの「区切り文字は英数字またはバックスラッシュであってはならない」エラーのトラブルシューティング

可能性のある複製:
ereg式をpregに変換

<?php
$searchtag = "google";
$link = "http://images.google.com/images?hl=de&q=$searchtag&btnG=Bilder-Suche&gbv=1";
$code = file_get_contents($link,'r');
ereg("imgurl=http://www.[A-Za-z0-9-]*.[A-Za-z]*[^.]*.[A-Za-z]*", $code, $img);
ereg("http://(.*)", $img[0], $img_pic);
echo '<img src="'.$img_pic[0].'" width="70" height="70">'; ?> 

そして、私はこのエラーを取得します

非推奨:関数ereg()は、C:\ Program Files\EasyPHP-5.3.8.1\www\m\img.phpの5行目で非推奨になりました

非推奨:関数ereg()は、C:\ Program Files\EasyPHP-5.3.8.1\www\m\img.phpの6行目で非推奨になりました

preg_match()関数はこのエラーを出します

警告:preg_match()[function.preg-match]:デリミタは6行目のC:\ Program Files\EasyPHP-5.3.8.1\www\m\img.phpの英数字またはバックスラッシュであってはなりません

警告:preg_match()[function.preg-match]:C:\ Program Files\EasyPHP-5.3.8.1\www\m\img.phpの7行目の区切り文字は英数字またはバックスラッシュであってはなりません

21
gordon33
  1. eregは非推奨です。使用しないでください。
  2. preg関数はすべて「Perl正規表現」です。つまり、正規表現に何らかの開始マーカーと終了マーカーが必要です。多くの場合、これは/または#、ただし、英数字以外は問題ありません。

たとえば、これらは機能します:

preg_match("/foo/u",$needle,$haystack);
preg_match("#foo#i",$needle,$haystack);
preg_match("@foo@",$needle,$haystack);
preg_match("\$foo\$w",$needle,$haystack); // bad idea because `$` means something
                                          // in regex but it is valid anyway
                                          // also, they need to be escaped since
                                          // I'm using " instead of '

しかし、これはしません:

preg_match("foo",$needle,$haystack); // no delimiter!
45
cwallenpoole

preg_match()を使用すると、正規表現の開始と終了は/などの区切り文字で終わる必要がありますが、例外はほとんどありません(たとえば、大文字と小文字を区別しない場合は末尾に「i」を追加します)。

例えば.

preg_match('/[regex]/i', $string)
3
Yes Barry