[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: рег.выр. для выдирания адреса картинки из <img>
artur1313
помогите составить такое, желательно поуниверсальней



Спустя 20 минут, 32 секунды (26.05.2009 - 22:22) jetistyum написал(а):
википедия поможет
http://ru.wikipedia.org/wiki/Регулярные_выражения
повторение - мать учения smile.gif

Спустя 1 час, 53 минуты, 26 секунд (27.05.2009 - 00:15) artur1313 написал(а):
млин, читайте первый пост, "помогите составить", а не киньте ссылок по регулярным выражениям, надо будем мне - поизучаю, а сейчас нужна именно помощь

 ! 

М
Для получения оперативной помощи советую почитать Правила, в частности Ч.II, п.4..
Bezdna

Спустя 4 минуты, 29 секунд (27.05.2009 - 00:20) Joker написал(а):
помоч в чом??? ты же не продемонстрировал не одной попытки.... не строчки кода....

Спустя 30 минут, 41 секунда (27.05.2009 - 00:51) jetistyum написал(а):
млин, тогда так и пиши, составьте мне ... такое-то регулярное выражение..
если бы ты, как справедливо заметил Joker, выложил бы код, который написан тобой, но не работает... я бы с удовольствием помог бы тебе его доработать... А если ты сам не хочешь тратить время на изучение и составление регулярки, почему я должен свое тратить smile.gif
думаю и остальные тебе не очень помогут.

Спустя 21 час, 22 минуты, 23 секунды (27.05.2009 - 22:13) artur1313 написал(а):
бб, phpforum, на хакере намного отзывчивее и понимающие люди, ни 1 не разглагольствовал, а трое сразу дало хорошие варианты своих регулярных выражений

Спустя 21 минута, 49 секунд (27.05.2009 - 22:35) kirik написал(а):
Мож тебе еще и сына сделали?
Если делаешь парсер, делай его с умом.

Спустя 1 час, 2 минуты, 6 секунд (27.05.2009 - 23:37) artur1313 написал(а):
kirik, догадливый wink.gif граббер делаю) точнее уже сделал) универсальный для дле сайтов) надеюсь сорвать на нем свой джек-пот wink.gif

Спустя 25 минут, 12 секунд (28.05.2009 - 00:02) kirik написал(а):
С нынешней популярностью ДЛЕ движка довольно умно smile.gif Только ты уже не первый тыц.

Спустя 5 минут, 50 секунд (28.05.2009 - 00:08) artur1313 написал(а):
ну эт и так понятно
dlegrub.net
universal grubber
и т.д.
их много есть, но я пытаюсь сочетать максимум функций из всех, чтоб был самый универсальный)........
вот, кстать, моя регулярка
'<img .*src=["\']?([^"\'\\s]+)["\']?.*>'
работает в 80% случаях, помогите найти ошибку, плиз)

Спустя 27 минут, 8 секунд (28.05.2009 - 00:35) Bezdna написал(а):
Цитата (artur1313 @ 27.05.2009 - 21:08)
помогите найти ошибку, плиз)


На хакере уже не помогают?

Спустя 7 часов, 20 минут, 27 секунд (28.05.2009 - 07:55) kirik написал(а):
artur1313, прежде чем грубить людям будь уверен, что они тебе не понадобятся smile.gif
Может буду не прав с педагогической точки зрения, но держи:
PHP
$text '<img style="check" style="check"  style="check"src="http://test.com"style="check"  style="check" />';
preg_match_all('/\<img[\S\s]+src=(["\'])(.+?)\\1[\S\s]+\>/is'$text$out);
print_r($out[2]);

Спустя 2 часа, 54 минуты, 38 секунд (28.05.2009 - 10:50) artur1313 написал(а):
kirik
оке оке, вижу хоть 1 сообщение по теме, спс)
только так же как и моё рег.выр. странно работает... если в текстовой переменной только 1 картинка, то работает норм, а если несколько - то выдирает адрес только последней картинки, как это понять о_О

Спустя 10 часов, 42 минуты, 11 секунд (28.05.2009 - 21:32) kirik написал(а):
Попробуй это:
Код
/\<img[^\>]+src=(["\'])(.+?)\\1[^\>]*\>/is

Спустя 3 часа, 2 минуты, 15 секунд (29.05.2009 - 00:35) artur1313 написал(а):
kirik
огромное спасибо
работает на все 100) то что нужно)

Спустя 33 минуты, 41 секунда (29.05.2009 - 01:08) waldicom написал(а):
Процент кирику не забудь отдать, когда свой джек-пот сорвешь.

Спустя 1 месяц, 11 дней, 16 часов, 38 минут, 29 секунд (10.07.2009 - 17:47) salamenko написал(а):
kirik
Привет, крик, вы уже помогли одному с рег выражениями, могли бы и мне помочь. В пхп я не ахти. Потратил 2 часа но не могу понять проблему одного модуля на движке ДЛЕ. Можете уделить для меня время?

в моде стоит код отвечающий за грабинг имеджа

PHP
function get_img_basic($text){
    preg_match('|<img(.*) src="([^"]*)"[^>]*>|is', $text, $out); 
    return $out
[2];}


а тут кусочек исполняещего кода

PHP
....
$img =  get_img_basic($row['short_story']);
if ($img =="")
$img ="{THEME}/images/nothumb.png";
else
    if ($conf['img_blank'] == "yes"){
    $images_show = "<a href=\"$img\" target=\"_top\">";
    $images_show_a = "</a>";
}else{
    $images_show = "<a href=\"$img\" target=\"_blank\">";
    $images_show_a = "</a>";
};
    if ($conf['img_click_allow'] == "no"){
    $images_show = "";
    $images_show_a = "";
};
$images = $images_show."<img src=\"$img\" align=\"".$conf[img_catindex_align]."\" width=\"".$conf[img_catindex_wigth]."\" height=\"".$conf[img_catindex_hieght]."\">".$images_show_a;
$row['short_story'] = preg_replace( "#<img src=[\"'](\S+?)['\"].+?".">#is", "", $row['short_story'] );
$row['short_story'] = preg_replace( "#<!--ThumbBegin-->(.+?)<!--ThumbEnd-->#ie", "", $row['short_story']);
$row['short_story'] = preg_replace( "#<!--ThumbBegin-->(.+?)<!--ThumbEnd-->#ie", "", $row['short_story']);
$row['short_story'] = preg_replace( "#<img src=[\"'](\S+?)['\"] align=['\"](.+?)['\"].+?".">#is", "", $row['short_story'] );
}else{
    $row['short_story'] = preg_replace( "#<img src=[\"'](\S+?)['\"].+?".">#is", "", $row['short_story'] );
    $row['short_story'] = preg_replace( "#<!--ThumbBegin-->(.+?)<!--ThumbEnd-->#ie", "", $row['short_story']);
    $row['short_story'] = preg_replace( "#<img src=[\"'](\S+?)['\"] align=['\"](.+?)['\"].+?".">#is", "", $row['short_story'] );
};


Он находит картинки, если в тексте код имеджа будет таким:

HTML
<!--TBegin--><a href="/uploads/posts/2009-06/1244482056_heroprojectnatalv4.jpg" onclick="return hs.expand(this)" ><img src="/uploads/posts/2009-06/thumbs/1244482056_heroprojectnatalv4.jpg" alt='Project Natal - невидемый геймпад для гробика' title='Project Natal' /></a><!--TEnd-->


Но если код будет другим, то модуль картину не видит, например:

HTML
<img src="/uploads/posts/2009-07/1246444877_27562_301x450.jpg" border="0" alt="alt" />


Ну он работает не всегда.

Спустя 1 час, 4 минуты, 25 секунд (10.07.2009 - 18:51) PandoraBox2007 написал(а):
PHP
function parse_img($ParseText)
{
 preg_match_all('#<\img.*?src=\"(.*?)\".*?\>#', $ParseText, $out, PREG_SET_ORDER);
 return (count($out) > 0) ? $out[0][1] : false;
}

Спустя 41 минута, 58 секунд (10.07.2009 - 19:33) kirik написал(а):
salamenko
так в чем проблема? Подставьте просто ту регулярку, которую я дал вместо той что у вас.

Спустя 13 часов, 17 минут, 51 секунда (11.07.2009 - 08:51) salamenko написал(а):
Дело в том, что на движке DLE есть опция, которая при загрузке картинки ее уменьшает. При выводе картинка становится кликабельная. Клиакая на уменьшенную картинку она увеличивается. Если картинка больше указанного размера, то она вводится так:

HTML
<!--TBegin--><a href="/uploads/posts/2009-06/1244482056_heroprojectnatalv4.jpg" onclick="return hs.expand(this)" ><img src="/uploads/posts/2009-06/thumbs/1244482056_heroprojectnatalv4.jpg" alt='P' /></a><!--TEnd-->


Но если загруженная картинка меньше чем указанный размер в настройках, то она вводится так:

HTML
<img src="/uploads/posts/2009-07/1246444877_27562_301x450.jpg" border="0" alt="alt" />


Тут пример ввода. Так вот. Для изменения структуры отображения новостей или блоков новостей есть модули такие как, Online Video или CatIndex1.9. Они забирают текст из shortnews, отделяют картинку от текста и рисуют новость в "кастом" форме. Почти все такие модули используют функцию:

PHP
function get_img_basic($text){
  
preg_match('|<img(.*) src="([^"]*)"[^>]*>|is'$text$out); 
  return 
$out[2];}


На всех таких модулях картинка находится если оно отоброжена как на первом примере, но если по другому модули не отображают картинку или они просто ввыводят другую картику, такую как nothumb.png. Я заменил функцию на

Цитата (PandoraBox2007 @ 10.07.2009 - 15:51)
PHP
function parse_img($ParseText)
{
 preg_match_all('#<\img.*?src=\"(.*?)\".*?\>#', $ParseText, $out, PREG_SET_ORDER);
 return (count($out) > 0) ? $out[0][1] : false;
}


Не помогла, то же самое. Также не помогла смена регулировки Крика.

Если найти выход то это практически поможет исправить проблему для всех модулей такого типа.

Спустя 36 минут (11.07.2009 - 09:27) salamenko написал(а):
Кажется я нашел проблему. Вспомнил что программа заберает из базы а не из сайта smile.gif. Посмотрел на базу данных. Вот пример двух данных.

Пример 1 - картинка не грабится
SQL
<p style=\\"text-align: center;\\"><img src=\\"http://gameplay.com.ua/files/t/b/7536.jpg\\" alt=\\"alt\\" width=\\"410\\" height=\\"410\\" /></p>\r\n<p>&nbsp;</p>\r\n<p><strong><span style=\\"font-size: small;\\">Как сообщает Kotaku, ссылаясь на Variety, продолжение фильма Hitman.......


Пример 2 - картинка грабится
SQL
<p style=\\"text-align: center;\\">&nbsp;</p>\r\n<div align=\\"center\\"><!--TBegin--><a href="/uploads/posts/2009-06/1244863048_burnout-paradise-01.jpg" onclick="return hs.expand(this)" ><img src="/uploads/posts/2009-06/thumbs/1244863048_burnout-paradise-01.jpg" alt=''Criterion работает над новым Need for Speed. Официально'' title=''Criterion работает над новым Need for Speed. Официально'' /></a><!--TEnd--></div>\r\n<p>&nbsp;</p>\r\n<p>&nbsp;</p>\r\n<p>Глава ЕА Джон Ричителло (John Riccitiello) официально подтвердил слухи о том, что студия Criterion трудится над продолжением серии Need for Speed, которое, по его словам, будет просто революционным...


На втором примере знаки \\" отсутствуют по этому и картинка находится. А вот на первом примере стоят символы \\" и поэтому картинки не отображаються. Какое универсальное выражение можно поставить для этой ситуации?

Спустя 11 часов, 29 минут, 55 секунд (11.07.2009 - 20:57) kirik написал(а):
salamenko
Можно перед тем как грабить обработать данные такой функцией:
PHP
$text = str_replace('\\\\"', null, $text);

где $text содержит обрабатываемые данные.

Спустя 5 часов, 52 минуты, 55 секунд (12.07.2009 - 02:50) salamenko написал(а):
Цитата (kirik @ 11.07.2009 - 17:57)
salamenko
Можно перед тем как грабить обработать данные такой функцией:
PHP
$text = str_replace('\\\\"', null, $text);

где $text содержит обрабатываемые данные.

kirik

PHP
$row['short_story'] = str_replace('\\'null$row['short_story']);


Символ " нужно оставить без него картинки не грабятся. Спасибо крик все заработала. Кстати я повсюду где грабится картинка с текстом, поставил это выражение и все ок smile.gif. Очень много сайтов на этом двжике и уних это проблема. А все просто нужно добавить один код.

Спустя 1 час, 26 минут, 40 секунд (12.07.2009 - 04:16) kirik написал(а):
Цитата (salamenko @ 11.07.2009 - 18:50)
Символ " нужно оставить без него картинки не грабятся.

Ой, да.. пардон smile.gif Так хотел написать:
PHP
$row['short_story'] = str_replace('\\\\"', '"', $row['short_story']);

мало ли, может где-нибудь еще встречаются \\ не там, где нада.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.