Я использую 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
Вы можете найти хорошую документацию здесь http://anasthecoder.blogspot.ae/2011/12/how-to-change-phps-eregi-to-pregmatch.html