将ereg()更改为preg_match()时,疑难解答“分隔符不能是字母数字或反斜杠”错误

时间:2011-11-16 22:25:32

标签: php regex preg-match ereg

  

可能重复:
  Converting ereg expressions to 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">'; ?> 

我得到了这个错误

  

不推荐使用:第5行的C:\ Program Files \ EasyPHP-5.3.8.1 \ www \ m \ img.php中不推荐使用函数ereg()

     

不推荐使用:第6行的C:\ Program Files \ EasyPHP-5.3.8.1 \ www \ m \ img.php中不推荐使用函数ereg()

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]:第7行的C:\ Program Files \ EasyPHP-5.3.8.1 \ www \ m \ img.php中的分隔符不能是字母数字或反斜杠

2 个答案:

答案 0 :(得分:45)

  1. ereg已弃用。不要使用它。
  2. preg函数都是“Perl正则表达式”,这意味着您需要在正则表达式上使用某种开头和结尾标记。通常这将是/#,但任何非字母数字都可以。
  3. 例如,这些将起作用:

    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!
    

答案 1 :(得分:3)

使用preg_match(),您的正则表达式必须以/之类的分隔符开头和结尾,除了少数例外情况(例如,为了不区分大小写,最后添加“i”)。

e.g。

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