RegEX как правильно вырезать из контента ссылку

insidex

флихтэръер
RegEX как правильно вырезать из контента ссылку

Пожалуйста,помогите разобраться с этими закорючками,всего лишь хочу из текста выделить ссылку ,то есть:


<a class=l href="http://www.test.com/">blablabla</a>


А с помощью регулярных выражений надо вытянуть оттуда текст(не ссылку!) httр://www.test.com/


Спасибо.
 

tf

крылья рулят
insidex а мождет не стоит?
зачем тебе это надо?
RegEX - это mysql/ javascript. ??
 

insidex

флихтэръер
OK,прошу неглумиться,программировать начал недавно:

PHP:
<?
$str="textblablabla....mnogo_texta...";

preg_match_all ("/<a class=l href=\"(.*)\/>/",  $str, $text, REG_PATTERN_ORDER);

echo ($text);

?>
 

tf

крылья рулят
$str='textblablabla.<a href="56"></a>...mnogo_texta...';
preg_match_all ("/<a href=\"(.*)\">/", $str, $text);
print_r($text);
 

insidex

флихтэръер
Спасибо, работает,только (сори за лам) как сделать,чтобы результат выводился НЕ в виде массива,т.е. как при работе с echo ?
 

tf

крылья рулят
insidex мануал тебе в руки int preg_match_all ( string pattern, string subject, array &matches [, int flags [, int offset]] )
а это уже твое дело как данные использовать
 

insidex

флихтэръер
Ладно,мануал то читал,только раньше я пользовался
mixed preg_replace ( mixed pattern, mixed replacement, mixed subject [, int limit]) - находил все что окаймляет ссылку -вырезал это и выводил через echo,
ты говорил,что есть еще способы,можно узнать какие?
 

insidex

флихтэръер
Ээ.будте любезны,скажите,почему функции preg_match и подобные не всегда срабатывают доконца,т.е. замена целиком всех строк происходит от раза к разу,постоянно остаются какие-то пробелы ,либо скрипт просто пропускает то что,ему положено заменить...Вот так вот.
 

white phoenix

Новичок
insidex
Выделяем значения параметров href/src/url из текста:
PHP:
function x_array_merge($arr1,$arr2)
{
 if (!is_array($arr1)) {$arr1 = array();}
 if (!is_array($arr2)) {$arr2 = array();}
 $arr = array();
 for ($i=0;$i<count($arr1);$i++) {$arr[$i]=($arr1[$i] == '')?$arr2[$i]:$arr1[$i];}
 return $arr;
}
function get_links(&$body)
{
 $pattern  = "/((@import\s+[\"'`]([\w:?=@&\/#._;-]+)[\"'`];)|";
 $pattern .= "(:\s*url\s*\([\s\"'`]*([\w:?=@&\/#._;-]+)";
 $pattern .= "([\s\"'`]*\))|<[^>]*\s+(src|href|url)\=[\s\"'`]*";
 $pattern .= "([\w:?=@&\/#._;-]+)[\s\"'`]*[^>]*>))/i";
 preg_match_all($pattern,$body,$matches);
 if (is_array($matches)) {$links = x_array_merge($matches[3],x_array_merge($matches[5],$matches[8]));}
 else {$links = array();}
 return $links;
}
 

insidex

флихтэръер
спасибо за пример,пошел разбираться в какую переменную текст пихать...
 

white phoenix

Новичок
insidex
Аргументом передавай.
PHP:
$links = get_links('<a class=l href="http://www.test.com/">blablabla</a>');
var_dump($links);
// array(1) {
//  [0]=>
//  string(20) "http://www.test.com/"
//}
Только убери & перед $body.
 

insidex

флихтэръер
Очень благодарен,сам бы я вряд ли додумался до такого примера.
 
Сверху