Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Регулярка


Автор: SwordOfDeath 2.9.2009, 23:05
Привет

И опять у меня траблы с регуляркой... Правило как-никак придумал...
Вобщем задача: есть
Код

RewriteRule ^\Qfiles/1251909939/test.txt\E$ /data/test.txt [NC]

Из этого нужно выцепить "1251909939"

написал вот такую регулярку:
Код

RewriteRule \^\\Qfiles/([0-9]{10})


Ну а код выглядит так...
Код

if (ereg("RewriteRule \^\\Qfiles/([0-9]{10})", $line, $args)) echo "ereg";


Но ereg возвращает false на вышеуказанной строчке...

Автор: brother79 3.9.2009, 06:27
Я обычно ereg не пользую, а пользую preg_match, но меня настораживают неэкранированные символы '/' и двойные кавычки, т.к. пообще обычно в пхп '/' участвует в выражении, а с двойными кавычками в регулярном - гемор лишний с экранированием, т.е. чтобы '\' проэкранировать - с двойными тебе надо писать "\\\\" вместо '\\', т.к. сначала экранируется для кавычек, а потом для рег. выражения.


if (preg_match('/RewriteRule \^\\Qfiles\/([0-9]{10})/', $line, $args)) echo "ereg";

Не проверял, будет ли работать - обламывает, но должно работать.

Автор: SwordOfDeath 3.9.2009, 10:37
Хм... Тему перенесли в "Администрирование Web серверов и Web служб" хотя вопрос я задавал по регулярным выражениям в PHP...

brother79, 
Спасибо огромное за помощь... Но ситуация прежняя...  условие не проходит...

Автор: brother79 3.9.2009, 10:50
Попробуй по частям отлаживать, т.е. напиши простое выражение типа:

if (preg_match('/RewriteRule/', $line, $args)) echo "ereg";

без всяких проблемных уч-ов, потом если проходит, добавляй понемногу символы, т.о. выяснишь на чём валится, какой символ не проходит.

Т.о. можно отлаживать регулярные выражения, как и другие программные части.

Автор: SwordOfDeath 3.9.2009, 11:09
Вот это проходит:
'/RewriteRule \^\\Q/'
А вот это уже нет:
'/RewriteRule \^\\Qf/'

Но у меня нет никаких мыслей по этому поводу =\

Автор: SwordOfDeath 3.9.2009, 11:46
Получилось! Но немного не так как я думал...
Код

if (preg_match('/\QRewriteRule ^\Qfiles\E\/([0-9]{10})/', $line, $args)) echo $args[1];

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)