Как преобразовать eregi в preg_match?

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

какие-либо идеи, как решить этот вопрос?

Спасибо

8
задан user187580 23 March 2010 в 16:02
поделиться

3 ответа

Если вы используете / в качестве разделителя (т.е. preg_match('/.../i', ...)), вам нужно экранировать все случаи / в вашем шаблоне, иначе php будет думать, что он относится к концу шаблона.

Вы также можете использовать другой символ, например % в качестве разделителя:

preg_match('%^http/[0-9]+\.[0-9]+[ \t]+([0-9]+)[ \t]*(.*)$%i',$line,$matches)
7
ответ дан 5 December 2019 в 09:25
поделиться

Вам нужно избежать разделителей внутри регулярного выражения (в данном случае / ):

"/^http\\/[0-9]+\\.[0-9]+[ \t]+([0-9]+)[ \t]*(.*)\$/i"

Но вы также можете выбрать другой разделитель, например ~ :

"~^http/[0-9]+\\.[0-9]+[ \t]+([0-9]+)[ \t]*(.*)\$~i"
6
ответ дан 5 December 2019 в 09:25
поделиться

Вы можете попробовать:

preg_match("@^http/[0-9]+\\.[0-9]+[ \t]+([0-9]+)[ \t]*(.*)\$@i",$line,$matches)
  • Вы можете убрать $match=
  • Вы используете / в качестве разделителя. и есть еще один /, присутствующий в после http, что фактически обозначает конец вашего регекса. Когда PHP видит [ после этого, он жалуется.
  • Вы можете использовать другой набор разделителей как @ или убрать / после http
5
ответ дан 5 December 2019 в 09:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: