Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Регулярные Выражения

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Парсинг url на оригиналы картинок
 
 автор: Трифанов Денис   (11.07.2013 в 19:36)   письмо автору
 
 

Здравствуйте. С регулярными выражениями только столкнулся и чет не до конца понимаю принцип работы. Подскажи что можно почитать, но только что бы без воды, а четко и ясно, честно сказать нет времени сейчас разбирать это. Бьюсь над задачей уже целый день, не могу понять почему не работает. Пытаюсь парсить адреса на картинки, но пока не выходит. Там куча всего, но те ссылки которые мне нужны они с 2-ух сторон ограничены примерно вот так:
img_href":"ссылка на картинку" Нужно выцепить ссылку. Я писал регулярные выражения примерно вот такие:
$pattern ='/img_href?.+http:.+[.][jpegng]{3,5}/i';
В таком случае он возвращает все в одну ячейку массива и не разбивает и там в результате img_href повторяется несколько раз, не понимаю почему, разве ? не говорит о том что в результате должно быть только 1 повторение? Я не понимаю принцип как он работает.rn Менял i на U, результат получше, в отдельных ячейках есть нормальные урл. Но не во всех.rnПодскажите куда лучше двигаться? Просто мне не нужны гифки к примеру, но когда он не находит символы которые вот здесь [jpegng] после точки он все приписывает вот сюда .+ и пробегает этот момент и добегает аж до следующей урл, как останавливать его вовремя, если не знаешь длины ссылки? Подскажите пожалуйста.

  Ответить  
 
 автор: ladan   (12.07.2013 в 00:40)   письмо автору
 
   для: Трифанов Денис   (11.07.2013 в 19:36)
 

$str = "img_href":"ссылка на картинку"";

$url = preg_replace("#.+;(.+?)&.*#","$1",$str);


не знаю пойдет ли

  Ответить  
 
 автор: Трифанов Денис   (12.07.2013 в 02:22)   письмо автору
 
   для: ladan   (12.07.2013 в 00:40)
 

Помогла вот такая штука.)
$pattern ="/img_href?.+http:.+(([.](jpg|jpeg|png|gif))|(}|,))/U";
Пришлось или еще делать, потому что, как оказалось, не все ссылки заканчиваются типом картинки.
Осталось только теперь обработать то что осталось в массиве и убрать все лишнее. Все равно обидно что за один раз не смог достать так как надо. Теперь буду оттачивать свое мастерство.

  Ответить  
 
 автор: Sfinks   (13.07.2013 в 12:35)   письмо автору
 
   для: Трифанов Денис   (11.07.2013 в 19:36)
 

> разве ? не говорит о том что в результате должно быть только 1 повторение
Говорит, что 0 или одно повторение.

А вот .+ говорит о том, что должно быть максимально много (жадный поиск) любых символов, но не меньше 1.

Т.е. (упрощу для примера) паттерн:
$pattern ='/img_href.+http/i';
в строке:
img_href что-то раз http img_href что-то два http img_href что-то три http
найдет не 3 вхождения, а одно, и в нем будет вся строка. т.е. от первого img_href, до последнего http.
Чтобы исправить это, нужно воспользоваться НЕ жадным поиском, заменив .+ на .+?
Тогда будет найдено 3 вхождения, каждое от img_href, до ближайшего http.

Если что, покажите фрагмент кода, который надо спарсить, тогда и РВ вам составят. А то на пальцах не понятно что там за шаблон.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования