我正在使用一个使用的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 '[' in
filename.php
任何想法如何解决这个问题?
谢谢
如果您使用/
的正则表达式分隔符(即preg_match('/.../i', ...)
),你需要逃避的任何实例/
在你的模式或PHP将认为它指的是模式的结束.
您还可以使用不同的字符,例如%
分隔符:
preg_match('%^http/[0-9]+\.[0-9]+[ \t]+([0-9]+)[ \t]*(.*)$%i',$line,$matches)
Run Code Online (Sandbox Code Playgroud)
您需要转义正则表达式中的分隔符(在本例中为/
):
"/^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)
你可以试试:
preg_match("@^http/[0-9]+\\.[0-9]+[ \t]+([0-9]+)[ \t]*(.*)\$@i",$line,$matches)
Run Code Online (Sandbox Code Playgroud)
$match=
/
作为分隔符,之后正则表达式中有另一个/现在http
,这有效地标记了正则表达式的结束.当PHP看到[
之后,它抱怨.@
或转义/
后http