解决将 ereg() 更改为 preg_match() 时出现的“分隔符不得为字母数字或反斜杠”错误

2022-08-30 17:38:21

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

警告:preg_match() [function.preg-match]:分隔符在 C:\Program Files\EasyPHP-5.3.8.1\www\m\img.php 第 7 行中不得为字母数字或反斜杠


答案 1
  1. ereg已弃用。不要使用它。
  2. 这些函数都是“Perl正则表达式”,这意味着你需要在正则表达式上有某种开始和结束标记。通常这将是 或 ,但任何非字母数字都可以。preg/#

例如,这些将起作用:

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!

答案 2

对于正则表达式,必须以分隔符开头和结尾,例如,除了少数例外(例如,在末尾添加“i”表示不区分大小写)。preg_match()/

例如:

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

推荐