我正在使用一个使用
的liberegi($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
如何解决此问题的任何想法?
由于
答案 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)