|
|
|
| Здравствуйте. С регулярными выражениями только столкнулся и чет не до конца понимаю принцип работы. Подскажи что можно почитать, но только что бы без воды, а четко и ясно, честно сказать нет времени сейчас разбирать это. Бьюсь над задачей уже целый день, не могу понять почему не работает. Пытаюсь парсить адреса на картинки, но пока не выходит. Там куча всего, но те ссылки которые мне нужны они с 2-ух сторон ограничены примерно вот так:
img_href":"ссылка на картинку" Нужно выцепить ссылку. Я писал регулярные выражения примерно вот такие:
$pattern ='/img_href?.+http:.+[.][jpegng]{3,5}/i';
В таком случае он возвращает все в одну ячейку массива и не разбивает и там в результате img_href повторяется несколько раз, не понимаю почему, разве ? не говорит о том что в результате должно быть только 1 повторение? Я не понимаю принцип как он работает.rn Менял i на U, результат получше, в отдельных ячейках есть нормальные урл. Но не во всех.rnПодскажите куда лучше двигаться? Просто мне не нужны гифки к примеру, но когда он не находит символы которые вот здесь [jpegng] после точки он все приписывает вот сюда .+ и пробегает этот момент и добегает аж до следующей урл, как останавливать его вовремя, если не знаешь длины ссылки? Подскажите пожалуйста. | |
|
|
|
|
|
|
|
для: Трифанов Денис
(11.07.2013 в 19:36)
| |
$str = "img_href":"ссылка на картинку"";
$url = preg_replace("#.+;(.+?)&.*#","$1",$str);
|
не знаю пойдет ли | |
|
|
|
|
|
|
|
для: ladan
(12.07.2013 в 00:40)
| | Помогла вот такая штука.)
$pattern ="/img_href?.+http:.+(([.](jpg|jpeg|png|gif))|(}|,))/U";
Пришлось или еще делать, потому что, как оказалось, не все ссылки заканчиваются типом картинки.
Осталось только теперь обработать то что осталось в массиве и убрать все лишнее. Все равно обидно что за один раз не смог достать так как надо. Теперь буду оттачивать свое мастерство. | |
|
|
|
|
|
|
|
для: Трифанов Денис
(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.
Если что, покажите фрагмент кода, который надо спарсить, тогда и РВ вам составят. А то на пальцах не понятно что там за шаблон. | |
|
|
|