Я использую 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