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


Автор: Frozen_Coyote 11.10.2012, 11:05
Приветствую!

Друзья, не могу сообразить, что не так в моей регулярке. Итак, задача: найте в неком html-тексте все теги картинок и обработать их callback функцией. Смысл в том, что нужны картинки как просто <img ..... /> так и <a href....><img ..../ ></a>

Пишу следующее:

Код

$txt = preg_replace_callback("/(<a\s.+?>)?<img\s.+?>(<\/a>)?/uis", "callBackConvertPic", $txt);


логика моя была такова: (<а> открывающий>) - может быть, может не быть <сама картинка> (<a> закрывающий) - может быть, может не быть/ 

Что сделала эта скотина: 

Она посчитала следующий фрагмент HTML-текста удовлетворяющий моему шаблону: 

Код

<a href="http://1111" target="_blank"></a>Тут идет текст целого абзаца, который мне нахрен не втрескался</p><p>&nbsp;</p><p><img.../>


ну и вопрос: подскажите пожалуйста, каким же паттерном мне дергать либо картинки, либо картинки в обрамлении а-тега, без вот вышерассказанного безобразия?

Благодарю

Автор: Fortop 11.10.2012, 12:20
попробуй так
(<img[^>]+/>)

Автор: Frozen_Coyote 11.10.2012, 12:33
не, не работает.. да и смысл каков - мне главное обломать жадность, т.е. найти не прсото ближайший к img тег а, а именно обрамляющий строго каринку.. а он стреляет до первого попавшегося

Автор: Fortop 11.10.2012, 13:47
Что значит не работает?

Цитата(Frozen_Coyote @  11.10.2012,  11:05 Найти цитируемый пост)
Итак, задача: найте в неком html-тексте все теги картинок

Он не выполняет свою задачу?

Автор: Frozen_Coyote 11.10.2012, 14:29
именно! как не преподнеси в паттерн шаблон тега картинки <img\s.+?> или (<img[^>]+/>) - это никак не влияет на захват тега А который находится не рядом а выше (см пример мой). Тег картинки то он ловит что по моему варианту что по твоему - одинаково правильно. А вот если <img> окружить тегом <a> - начинается лажа 

Автор: ksnk 11.10.2012, 15:21
К примеру вот так можно 
Код

$txt = preg_replace_callback("/(<a[^>]*>)\s*(<img[^>]*>)\s*(<\/a>)|(<img[^>]*>)/ui", "callBackConvertPic", $txt);

Надо только учитывать, что 1,2,3 - это значение с сылкой, а 4 - чистый img.

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