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
Везде могут встречатся символы "-" и "_" еще...
Нужно выделить путь до файла и имя файла, так как они указаны в теге.
Вообщем голову уже сломал...
подскажите плиз...
цитата
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";
}
}
?>
написано не мной, а спижжено и переделано онли
цитата
05/01/08 в 13:10
Sha
Во-первых регулярное выражение не верно. Почему ? Домашнее задание.
Во-вторых алгоритм уродский как раз потому, что регулярное выражение не верно.
цитата
05/01/08 в 13:16
AWMovies
ну х.з. уродско или не уродско, работает все, совпадения где надо.остальное пох пока, мне же не для выставки
, алгоритм просто спижжен с учебников по 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-ти спонсоров, нигде таких извратов не было слава богу, схавал и полные урлы и относительные, все правильно, но на всякий случай запишу и этот, спасибо
цитата
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
Не нужно отвечать за долбоебов. Надо отвечать за себя и правильно писать программы.
цитата
05/01/08 в 13:51
Pentarh
Ну есть серъезное различие между понятиями "правильность" и "целесообразность".
Программисты очень часто ебут время, нервы и моск ради первого понятия, принебрегая вторым
мое решение целесообразно. Потрать три часа, напиши правильный регексп и он будет работать так же как мой а виртуальные баги типа как ты привел вряд ли вообще когда нибудь проявятся
цитата
05/01/08 в 14:11
Sha
Ты привел
каноническое
рассуждение недоученных программистов. Просто эталон.
В падлу расписывать все столпы ламерства на которые оно упирается. А упирается оно НА ВСЕ столпы. Ни одного не пропущено.
цитата
05/01/08 в 14:17
Pentarh
А ты не привел тут нихуя а только пиздишь не по теме
Пока ты чесал языком люди предложили уже три решения. Это и есть различие между твоей правильностью и нашей целесообразностью, товарищ "не-ламер"
цитата
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
Ну, так ты выложишь нам свое супер-решение или так и дальше пиздеть будешь?
цитата
05/01/08 в 22:13
AWMovies
Еще раз напишу, решение РАБОТАЕТ, перепробовал уже на куче fhg, глюков нет, пусть оно неправильное, но оно РАБОТАЕТ, остальное мне похую.
Sha
Дай правильное решение, или подскажи , намекни, ветка не для писько-меряний вроде
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
Новая тема
Ответить
Эта страница в полной версии