关于eregi()和preg_match()的问题

时间:2011-08-30 15:49:53

标签: php preg-match eregi

我的代码是

if(eregi($pattern,$file)){ $out['file'][]=$file; }else

但是在php 5.3中不起作用,它显示警告

Function eregi() is deprecated

所以我改为

if(preg_match($pattern,$file)){ $out['file'][]=$file; }else

但现在显示

preg_match(): No ending delimiter '.' found

我输入了错误的语法吗?

1 个答案:

答案 0 :(得分:3)

模式需要有某种delimiter character围绕它。

if(preg_match('/' . $pattern . '/',$file)){

/是典型的,但可以使用“任何非字母数字,非反斜杠,非空白字符”。只需确保您的分隔符不会出现在$pattern本身。

因此,如果您的模式为http://(.*),其中已包含/个字符,您可能需要选择其他内容,例如~

if(preg_match('~' . $pattern . '~',$file)){

或者,如下面的@jensgram注释,如果你不能保证你的模式不会包含某个分隔符,你可以使用preg_quote()来转义模式中的那些字符,如下所示: / p>

if(preg_match('~' . preg_quote($pattern, '~') . '~',$file)){

哦,此外,由于您正在使用eregi()(不区分大小写),因此您需要在分隔符之外添加i modifier以区分大小写不敏感。

if(preg_match('~' . $pattern . '~i',$file)){