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>';
?>
результат:
Код:
Array
(
[0] =>
http://www.url.com/path_to_file/file.dat
[1] =>
http://www.url.com/path_to_file/file.dat
2
[2] =>
http://www.url.com/path_to_file/file.dat
3
[3] =>
http://www.url.com/path_to_file/file.dat
4
[4] =>
http://www.url.com/path_to_file/file.dat
5
)
цитата
28/07/07 в 15:29
wMaster
Пасибо. Доработал, получилось это
Код:
/<a.*?href\s*=[\s\"\']*([^\s\"\']*).*?>(.*?)<\/\s*a\s*>/i
делает именно то что нужно - вытаскивает урл и содержимое линки.
цитата
05/08/07 в 22:05
wMaster
Еще одно затруднение... есть 4 варианта:
Код:
http://www.gallery-domain.com/path/galleries/142/index.html
http://www.gallery-domain.com/path/galleries/142/?var1=value1&var2=value2
http://www.gallery-domain.com/path/galleries/142/
http://www.gallery-domain.com/path/galleries/142
во всех 4-х случаях после применения регулярного выражения должно остаться
http://www.gallery-domain.com/path/galleries/142
пока есть такое регулярное выражение (http[^\?]*), получает:
Код:
http://www.gallery-domain.com/path/galleries/142/index.html
http://www.gallery-domain.com/path/galleries/142/
http://www.gallery-domain.com/path/galleries/142/
http://www.gallery-domain.com/path/galleries/142
а (http.*)\/, получает:
Код:
http://www.gallery-domain.com/path/galleries/142
http://www.gallery-domain.com/path/galleries/142
http://www.gallery-domain.com/path/galleries/142
http://www.gallery-domain.com/path/galleries
цитата
06/08/07 в 03:08
DelGod
Код:
http://www.gallery-domain.com/path/galleries/142/index.html
http://www.gallery-domain.com/path/galleries/142/?var1=value1&var2=value2
http://www.gallery-domain.com/path/galleries/142/
http://www.gallery-domain.com/path/galleries/142
(http[^\?]*?\/?)(\?.*)?([^\/]+\.(html|php|cgi|pl|asp))?$
нужный результат в первых скобках
Код:
http://www.gallery-domain.com/path/galleries/142/
http://www.gallery-domain.com/path/galleries/142/
http://www.gallery-domain.com/path/galleries/142/
http://www.gallery-domain.com/path/galleries/142
цитата
06/08/07 в 12:42
wMaster
DelGod писал:
(http[^\?]*?\/?)(\?.*)?([^\/]+\.(html|php|cgi|pl|asp))?$
нужный результат в первых скобках
Код:
http://www.gallery-domain.com/path/galleries/142/
http://www.gallery-domain.com/path/galleries/142/
http://www.gallery-domain.com/path/galleries/142/
http://www.gallery-domain.com/path/galleries/142
спасибо, чуть дополнил (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 символа "/"
цитата
07/08/07 в 10:15
DelGod
2localhost
DelGod писал:
ты не можешь знать количества слешей
просто проверь свой регексп на следующем списке
Код:
http://www.gallery-domain.com/path/dir1/dir2/galleries/142/index.html
http://www.gallery-domain.com/path/dir1/dir2/galleries/142/?var1=value1&var2=value2
http://www.gallery-domain.com/path/dir1/dir2/galleries/142/
http://www.gallery-domain.com/path/dir1/dir2/galleries/142
http://www.gallery-domain.com/galleries142/index.html
http://www.gallery-domain.com/galleries142/?var1=value1&var2=value2
http://www.gallery-domain.com/galleries142/
http://www.gallery-domain.com/galleries142
цитата
08/08/07 в 01:19
Alchemist
Попробуй так:
Код:
<?
$str='http://www.gallery-domain.com/path/dir1/dir2/galleries/142/index.html
http://www.gallery-domain.com/path/dir1/dir2/galleries/142/?var1=value1&var2=value2
http://www.gallery-domain.com/path/dir1/dir2/galleries/142/
http://www.gallery-domain.com/path/dir1/dir2/galleries/142
http://www.gallery-domain.com/galleries142/index.html
http://www.gallery-domain.com/galleries142/?var1=value1&var2=value2
http://www.gallery-domain.com/galleries142/
http://www.gallery-domain.com/galleries142
';
$reg = '/^(http:\/\/.*?)[\/\s]*([\/][^\/]*[\.\?]+[^\/]*)?$/ism';
preg_match_all($reg, $str, $matches);
echo "<pre>";
print_r($matches);
echo "</pre>";
?>
Новая тема
Ответить
Эта страница в полной версии