Master-X
Форум | Новости | Статьи
Главная » Форум » Программинг, Скрипты, Софт, Сервисы » 
Тема: Подскажите регулярное выражение.
цитата
05/01/08 в 09:41
 AWMovies
Задумал тут кое-что на php для личных нужд, и уперся в регулярные выражения.

Есть html, в html-е есть ссылки на пикчи
Код:
<a href="bla-bla/bla-bla.jpg">

Нужно выделить "bla-bla/bla-bla.jpg", при чем "bla-bla/bla-bla.jpg" может быть:
1.Полный урл "http://bla-bla.com/bla/bla-bla.jpg"
2.Относительно "bla-bla/bla-bla.jpg"
3.Имя самого файла может быть Код:
[A-Za-z0-9]*\.jpg


Везде могут встречатся символы "-" и "_" еще...
Нужно выделить путь до файла и имя файла, так как они указаны в теге.

Вообщем голову уже сломал...
smail27.gif подскажите плиз...
цитата
05/01/08 в 09:45
 dDan
/<a href=\"(.*)\">/
цитата
05/01/08 в 09:48
 AWMovies
Код:
/<a href=\"(.*\.jpg)\">/


Ага, спасибо, вот модификация котороя заработала для моих условий=)

Может пригодиццо кому потом, функция дергающая урлы до пиксов в фхг.
Код:
<?php
$fhg_url="s.txt";

function img_links ($page){
   $page = implode('',@file($page));
   if(!preg_match_all("/<a href=\"(.*\.jpg)\">/",$page,$url_list))
       { return error; }
   $link = array();
       foreach ($url_list as $url_temp){
           foreach ($url_temp as $urla){
              if(!preg_match("~href~i",$urla)
                 and !preg_match("~javascript~i",$urla)
                 and !preg_match("~mailto~i",$urla)
                 and !preg_match("~#~i",$urla)){
                 $link[] = $urla;
                }
            }
         }
     return $link;
   }

   
$links = img_links("$fhg_url");
    //ссылки на печать
if ($links != 'error'){
      while(list($key, $val) = @each ($links)){
            print "$key.  $val <br>\n";
           }
  }

?>


написано не мной, а спижжено и переделано онлиicon_smile.gif
цитата
05/01/08 в 13:10
 Sha
Во-первых регулярное выражение не верно. Почему ? Домашнее задание.
Во-вторых алгоритм уродский как раз потому, что регулярное выражение не верно.
цитата
05/01/08 в 13:16
 AWMovies
ну х.з. уродско или не уродско, работает все, совпадения где надо.остальное пох пока, мне же не для выставкиicon_smile.gif , алгоритм просто спижжен с учебников по php, поменял только регулярное выражение в preg_match_all.

Предложи верный вариант, скажу спасибо только. а домашнее задание... так не буду я штудировать книгу по регуляркам ради одного выражения, у меня и так от них голова болит...
цитата
05/01/08 в 13:20
 Pentarh
"/<a[^>]+href=\"?([^\"\r\n\t ]*?\.jpg)\"?/ism"

Мое выражение будет находить а твое нет такие вещи:

<a class="blah"
href="qwe/a.jpg"

<A HREF="qwe/blah.jpg"

<A HREF="qwe/blah.JPG"

<A HREF=qwe/blah.JPG
цитата
05/01/08 в 13:26
 AWMovies
тоже верно, но пока попробовал фхг 10-ти спонсоров, нигде таких извратов не было слава богу, схавал и полные урлы и относительные, все правильно, но на всякий случай запишу и этот, спасибоicon_smile.gif
цитата
05/01/08 в 13:33
 Sha
Pentarh писал:
"/<a[^>]+href=\"?([^\"\r\n\t ]*?\.jpg)\"?/ism"

<ambahref="blablabla.jpg"> - это сылка по-твоему ?
цитата
05/01/08 в 13:37
 Pentarh
А какой долбоеб будет такое вставлять в код? Даже если вставит, он наверняка будет иметь ввиду тег А
цитата
05/01/08 в 13:40
 Sha
Не нужно отвечать за долбоебов. Надо отвечать за себя и правильно писать программы. icon_smile.gif
цитата
05/01/08 в 13:51
 Pentarh
Ну есть серъезное различие между понятиями "правильность" и "целесообразность".

Программисты очень часто ебут время, нервы и моск ради первого понятия, принебрегая вторым icon_smile.gif

мое решение целесообразно. Потрать три часа, напиши правильный регексп и он будет работать так же как мой а виртуальные баги типа как ты привел вряд ли вообще когда нибудь проявятся icon_smile.gif
цитата
05/01/08 в 14:11
 Sha
Ты привел каноническое рассуждение недоученных программистов. Просто эталон.
В падлу расписывать все столпы ламерства на которые оно упирается. А упирается оно НА ВСЕ столпы. Ни одного не пропущено.
цитата
05/01/08 в 14:17
 Pentarh
А ты не привел тут нихуя а только пиздишь не по теме icon_smile.gif

Пока ты чесал языком люди предложили уже три решения. Это и есть различие между твоей правильностью и нашей целесообразностью, товарищ "не-ламер" icon_smile.gif
цитата
05/01/08 в 14:30
 Sha
Ни "одно" из того что предложили не является решением. Так что тут только языками и чешут. Я не сильно от вас отстал.
цитата
05/01/08 в 14:36
 Pentarh
Ну еще до меня человек сказал что граббер работает. Пусть на 60%, но _работает_, делает свое дело и даже возможно приносит бабло.

Я сейчас в некой степени прожект манагер и меня кумарит вот это качество в программерах ))

Сука, до потери пота будет доказывать свою правоту в то время как компания теряет бабло и ей нужно хоть какое то, пусть баговое, но быстрое временное решение.
цитата
05/01/08 в 18:07
 Sha
А хорошее решение компании не нужно ? Тогда пусть держат таких как ты.
цитата
05/01/08 в 19:07
 Pentarh
Ну, так ты выложишь нам свое супер-решение или так и дальше пиздеть будешь? icon_smile.gif
цитата
05/01/08 в 22:13
 AWMovies
Еще раз напишу, решение РАБОТАЕТ, перепробовал уже на куче fhg, глюков нет, пусть оно неправильное, но оно РАБОТАЕТ, остальное мне похую. icon_smile.gif
Sha Дай правильное решение, или подскажи , намекни, ветка не для писько-меряний вроде icon_smile.gif
Pentarh Цитата:
"правильность" и "целесообразность"
+1
цитата
05/01/08 в 22:21
 dDan
Sha ) ты цену себе набиваешь ) мы с утра просгулись ответили у человека все работает он рад, дети рады, взрослые рад ) что еще надо то ) миру мир
цитата
06/01/08 в 02:00
 Randal
между прочим занятная тема!

я бы предложил вот такую прегу

/<a(\b[^>]*)\bhref=\"([a-z0-9_-]*\.(jpg|gif|png))\">/i

(\b[^>]*)\b - отловит весь мусор типа class=blablabla... \b нужны чтобы не ловились некорректные тэги типа <aclass или <amba

([a-z0-9_-]*\.(jpg|gif|png)) - собсно субпатерн отлавливающий картинку. в скобках можно поставить любой набор расширений

/i - регистронезависимость(вдруг кто-нибудь jPg файлы будет заливать)

в итоге в массиве получаем элементы 1) мусор 2) картинку(с расширением ессно) 3) само расширение

может кто добавит\исправит?
цитата
10/01/08 в 16:23
 dpurnovich
я так картинки отлавливаю
preg_match_all('{<img\s[^>]*src=(["\']?)(.*?)(?:\1|\s|>)}is',$gde,$kuda);

адрес в $kuda[2][$i]

тоже мучился пока не придумал :)

второй вариант должен работать быстрей , но непроверял, а тот который верху работает
preg_match_all('{<img\s[^>]*src=(["\']?)(.*?)[\1\s>]}is',$gde,$kuda);
цитата
10/01/08 в 16:45
 dpurnovich
а по сылкам можно так

preg_match_all('{<a\s[^>]*href=(["\']?)(.*?\.(?:gif|jpe?g|bmp|png))[\1\s>]}is',$gde,$kuda);

если только джепеги:
preg_match_all('{<a\s[^>]*href=(["\']?)(.*?\.jpe?g)[\1\s>]}is',$gde,$kuda);
цитата
10/01/08 в 22:53
 AWMovies
dвсе записал ребяты, +5


Эта страница в полной версии