如何将eregi转换为preg_match?

时间:2010-03-23 16:02:07

标签: php regex

我正在使用一个使用

的lib
eregi($match="^http/[0-9]+\\.[0-9]+[ \t]+([0-9]+)[ \t]*(.*)\$",$line,$matches)

但由于eregi现已弃用,我想将上面的内容转换为preg_match。我尝试了如下

preg_match($match="/^http/[0-9]+\\.[0-9]+[ \t]+([0-9]+)[ \t]*(.*)\$/i",$line,$matches)

但它会引发错误Unknown modifier '[' in filename.php

如何解决此问题的任何想法?

由于

4 个答案:

答案 0 :(得分:7)

如果使用/作为正则表达式分隔符(即preg_match('/.../i', ...)),则需要在模式中转义/的任何实例,否则php会认为它指的是结尾模式。

您还可以使用其他字符,例如%作为分隔符:

preg_match('%^http/[0-9]+\.[0-9]+[ \t]+([0-9]+)[ \t]*(.*)$%i',$line,$matches)

答案 1 :(得分:6)

您需要转义正则表达式中的delimiters(在本例中为/):

"/^http\\/[0-9]+\\.[0-9]+[ \t]+([0-9]+)[ \t]*(.*)\$/i"

但您也可以选择不同的分隔符,例如~

"~^http/[0-9]+\\.[0-9]+[ \t]+([0-9]+)[ \t]*(.*)\$~i"

答案 2 :(得分:5)

您可以尝试:

preg_match("@^http/[0-9]+\\.[0-9]+[ \t]+([0-9]+)[ \t]*(.*)\$@i",$line,$matches)
  • 您可以放弃$match=
  • 您使用/作为分隔符 并且还有另一个/现在 http后的正则表达式,有效 标志着你的正则表达式的结束。当PHP 在抱怨之后看到[
  • 您可以使用其他一组 分隔符为@或在/
  • 之后转义http

答案 3 :(得分:0)