Как конвертировать eregi в preg_match? - PullRequest
8 голосов
/ 23 марта 2010

Я использую библиотеку, которая использует

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

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

Спасибо

Ответы [ 4 ]

7 голосов
/ 23 марта 2010

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

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

preg_match('%^http/[0-9]+\.[0-9]+[ \t]+([0-9]+)[ \t]*(.*)$%i',$line,$matches)
6 голосов
/ 23 марта 2010

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

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

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

"~^http/[0-9]+\\.[0-9]+[ \t]+([0-9]+)[ \t]*(.*)\$~i"
5 голосов
/ 23 марта 2010

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

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

Хорошую документацию вы можете найти здесь http://anasthecoder.blogspot.ae/2011/12/how-to-change-phps-eregi-to-pregmatch.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...