Я использую 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
какие-либо идеи, как решить этот вопрос?
Спасибо
Если вы используете /
в качестве разделителя (т.е. preg_match('/.../i', ...)
), вам нужно экранировать все случаи /
в вашем шаблоне, иначе php будет думать, что он относится к концу шаблона.
Вы также можете использовать другой символ, например %
в качестве разделителя:
preg_match('%^http/[0-9]+\.[0-9]+[ \t]+([0-9]+)[ \t]*(.*)$%i',$line,$matches)
Вам нужно избежать разделителей внутри регулярного выражения (в данном случае /
):
"/^http\\/[0-9]+\\.[0-9]+[ \t]+([0-9]+)[ \t]*(.*)\$/i"
Но вы также можете выбрать другой разделитель, например ~
:
"~^http/[0-9]+\\.[0-9]+[ \t]+([0-9]+)[ \t]*(.*)\$~i"
Вы можете попробовать:
preg_match("@^http/[0-9]+\\.[0-9]+[ \t]+([0-9]+)[ \t]*(.*)\$@i",$line,$matches)
$match=
/
в качестве разделителя.
и есть еще один /, присутствующий в
после http
, что фактически
обозначает конец вашего регекса. Когда PHP
видит [
после этого, он жалуется. @
или убрать /
после http