Регулярные выражения.

alekciy

Новичок
Регулярные выражения.

Нужно было из файла выташить URL картинки, т.е. параметр src тега IMG (на странице он один). Большое выражение получилось, и заработало, но не совсем так как планировалось. Кроме URL функция возвращали ещё параметры до знака >.
Потом устал, все выключил. Чуть позже вернулся и стал дальше думать, но вот засада! вообще перестал скрипт работать! ((( что ни сделаю, выдает что нет вхождений и все тут. Думал, может чего не так сделал? Проверить решил простейшим примером.... и не вышло! Так может у меня сбой в системе возник???
Потому как даже простейший пример не работает (в файле есть строка в которой стоит просто слово gif):
PHP:
 <?php
$handle = fopen("index.htm", "r");
while (!feof($handle)) {
    $line = fgets($handle);
    $pattern="/^(gif)$/";
    $url_img=preg_match($pattern, $line , $matches);
};
print $matches[1];
fclose($handle);
?>
Почему же даже простейший пример не работает? Я даже уже и такие варианты пробывал:

$pattern="/^(gif)\r\n$/";
$pattern="/^(gif)$\r\n/";
$pattern="/^(gif)\r$/";

В общем разные варианты \r и \n но не работает ни в какую. Нет совпадений и все тут!
 

Кром

Новичок
>Почему же даже простейший пример не работает?

У тебя это не "простейший пример". Простейший пример, это открыть мануал по preg_match и попробовать пример от туда.
А эти терзания баяна типа "\r\n","\r" и т.д. здесь на нужны.
 

alekciy

Новичок
Кром
А эти терзания баяна типа "\r\n","\r" и т.д. здесь на нужны.
Так пришлось. Потому как не хотел он работать, вот я и подумал, что коль скоро fgets включает в возвращаемое значение и окончание строки, то может это нужно в шаблоне тоже отмечать?

Простейший пример, это открыть мануал по preg_match и попробовать пример от туда.
Хм... вариант... только вот там же нет для preg_match варианта с чтением из файла. А может все дело в этом? Как-то неверно читаеся файл?

Значит шаблон $pattern="/^(gif)$/"; для поиска слова gif (если оно в строке одно) правильный?
 

Solid

Drosera anglica
PHP:
$text = fread(fopen('index.html', 'r'), filesize('index.html'));
preg_match_all("|<img[^>]src=\"([^>]+)\"|U", $text, $out);
print_r($out);
 

realman

Новичок
^ - начало строки
$ - конец строки
в твоем выражении, значит, строка должна быть только "gif", чтобы preg_match нашел таковую.

открой мануал и хорошо почитай его.
 

alekciy

Новичок
realman
^ - начало строки
$ - конец строки
в твоем выражении, значит, строка должна быть только "gif", чтобы preg_match нашел таковую.

А то я не знаю? Знаю и все читал.

[q](в файле есть строка в которой стоит просто слово gif)[/q]


Solid
Спасибо, опробую.
 

white phoenix

Новичок
Solid
> $text = fread(fopen('index.html', 'r'), filesize('index.html'));
Про [m]file_get_contents[/m] слышал?
> preg_match_all("|<img[^>]src=\"([^>]+)\"|U", $text, $out);
А <img src='path'> или <img src=path> или <img param=value src="path">?
> <img[^>]
'<imgasrc' скушает. Тут по смыслу должен быть '\s+'.
Про то что ты забыл модификатор 'i' я молчу.
UPD: :D
 

alekciy

Новичок
Такой вопрос, а что означает |...|U? А? Что-то я не нашел про это...

Про то что ты забыл модификатор 'i' я молчу.
Так ведь я уверен, что буквы будут в нижнем регистре.
 

SiMM

Новичок
> а что означает |...|U?
[m]PCRE[/m]
[m]reference.pcre.pattern.modifiers[/m]
 

alekciy

Новичок
Ах вот оно что! Спасибо! А то я жадность отключал в выражении знаком '?'. U мне больше нравиться ))
 
Сверху