2010-03-23 3 views
7

Я использую LIB, который используетКак преобразовать eregi в preg_match?

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

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

Благодаря

+0

Вы можете оставить из '$ спички =' в оба коде Примеры, таким образом, они совершенно не нужны – lamas

+0

[«Как изменить PHP eregi на preg_match»] (http://customphpfunctions.blogspot.com/2011/12/how-to-change-phps-eregi-to-pregmatch.html) имеет объяснение как eregi, так и preg_match, а также как заменить изношенную функцию. – 2011-12-04 19:39:22

ответ

6

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

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

preg_match('%^http/[0-9]+\.[0-9]+[ \t]+([0-9]+)[ \t]*(.*)$%i',$line,$matches) 
+0

+1 для объяснения '/'. Да, когда PHP находит любое '/' в вашем регулярном выражении, он будет рассматривать как конец регулярного выражения. –

6

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

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

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

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

Первое предложение работало как шарм. –

5

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

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