如何将eregi转换为preg_match?

use*_*580 8 php regex

我正在使用一个使用的lib

eregi($match="^http/[0-9]+\\.[0-9]+[ \t]+([0-9]+)[ \t]*(.*)\$",$line,$matches)
Run Code Online (Sandbox Code Playgroud)

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

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

但它会引发一个错误,说Unknown modifier '[' infilename.php

任何想法如何解决这个问题?

谢谢

Dan*_*uis 7

如果您使用/的正则表达式分隔符(即preg_match('/.../i', ...)),你需要逃避的任何实例/在你的模式或PHP将认为它指的是模式的结束.

您还可以使用不同的字符,例如%分隔符:

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


Gum*_*mbo 6

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

"/^http\\/[0-9]+\\.[0-9]+[ \t]+([0-9]+)[ \t]*(.*)\$/i"
Run Code Online (Sandbox Code Playgroud)

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

"~^http/[0-9]+\\.[0-9]+[ \t]+([0-9]+)[ \t]*(.*)\$~i"
Run Code Online (Sandbox Code Playgroud)


cod*_*ict 5

你可以试试:

preg_match("@^http/[0-9]+\\.[0-9]+[ \t]+([0-9]+)[ \t]*(.*)\$@i",$line,$matches)
Run Code Online (Sandbox Code Playgroud)
  • 你可以放弃 $match=
  • 您正在使用/作为分隔符,之后正则表达式中有另一个/现在http,这有效地标记了正则表达式的结束.当PHP看到[之后,它抱怨.
  • 您可以使用一组不同的分隔符作为@或转义/http