Master-X
Форум | Новости | Статьи
Главная » Форум » Программинг, Скрипты, Софт, Сервисы » 
Тема: Ищется помощь по регулярному выражению
цитата
28/07/07 в 14:30
 wMaster
необходимо вдрать http://www.url.com/path_to_file/file.dat из Код:
<a href =  "   http://www.url.com/path_to_file/file.dat    " style="color:#FFFFFF; font-size:17px; font-weight: bold;"     >LINK_TEXT</ a >


Пока застрял на этом
Код:
/<a.*?=(.*?)>(.*?)<\/\s*a\s*>/i

вытаскивает
Код:
"   http://www.url.com/path_to_file/file.dat    " style="color:#FFFFFF; font-size:17px; font-weight: bold;"     


Необходимо найти регулярку учитывающую href вида
Код:
href =  "   http://www.url.com/path_to_file/file.dat    "
href =  '   http://www.url.com/path_to_file/file.dat    '
href =     http://www.url.com/path_to_file/file.dat   
href=http://www.url.com/path_to_file/file.dat

т.е. с пробелами и с/без закрывающих кавычек/апострофов
цитата
28/07/07 в 14:55
 adultblogging
Код:
<?php
$str = '<a href =  "   http://www.url.com/path_to_file/file.dat    " >
<a href =  \'   http://www.url.com/path_to_file/file.dat2    \'>
<a href =     http://www.url.com/path_to_file/file.dat3    >
<a href=http://www.url.com/path_to_file/file.dat4>
<a href =  "   http://www.url.com/path_to_file/file.dat5    " style="color:#FFFFFF; font-size:17px; font-weight: bold;"     >LINK_TEXT</ a >';

$reg = '~<a.*?href\s*=[\s"\']*([^\s>]+)~is';
preg_match_all($reg, $str, $out);
print '<pre>';print_r($out[1]);print '</pre>';
?>


результат: Код:
цитата
28/07/07 в 15:29
 wMaster
Пасибо. Доработал, получилось это
Код:
/<a.*?href\s*=[\s\"\']*([^\s\"\']*).*?>(.*?)<\/\s*a\s*>/i

делает именно то что нужно - вытаскивает урл и содержимое линки.
цитата
06/08/07 в 12:42
 wMaster
DelGod писал:

(http[^\?]*?\/?)(\?.*)?([^\/]+\.(html|php|cgi|pl|asp))?$
нужный результат в первых скобках
Код:


спасибо, чуть дополнил (http[^\?]*?)\/?(\?.*)?([^\/]+\.(html|htm|php|cgi|pl|asp)(\?.*)?)?$
для варианта http://www.gallery-domain.com/path/galleries/142/index.html?var1=value1&var2=value2,
и чтоб вырезался последний слеш в первых трех результатах
цитата
06/08/07 в 16:26
 localhost
все намного проще:

Код:

$str='<a href =  "   http://www.url.com/path_to_file/file.dat    " style="color:#FFFFFF; font-size:17px; font-weight: bold;"     >LINK_TEXT</ a >
<a    href=    "   http://www.gallery-domain.com/path/galleries/142/?var1=value1&var2=value2"    >  test </a>
';


preg_match_all("/<a.{0,40}href=(\"|')(http:\/\/.+\/.+\/)(.*)(\"|\'|>)/Usi",$ereg_replace(" +",'',$str),$tmp);



результат в $tmp[2]
цитата
06/08/07 в 19:39
 DelGod
2localhost
имхо
ты не можешь знать количества слешей
а для каждого конкретного случая менять регексп не выход
цитата
06/08/07 в 22:20
 localhost


объясняю:
пхпшная реализация регэкспов по шаблону
"http:\/\/.+\/.+\/"

означает что нужно найти все строки где в начале:
"http://"
а в конце "/"
при этом в промежутке между ними может быть как минимум один символ "/" и как минимум два любых символа.

поэтому под этот регэксп попадают урлы где есть как минимум 2 символа "/"
цитата
08/08/07 в 01:19
 Alchemist
Попробуй так:
Код:


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