PHP: <? $html=" <a href='http://www.kuzbass.ru'>olo</a> <a href=http://www.yandex.ru>olo</a> <a href=\"http://www.ya.ru\">olo</a> <a href=google.ru>olo</a> "; preg_match_all("!<a.*?href=\"?'?([^ \"'>]+)([^>]+)>.*?</a>!ism", $html, $match); print_r($match[1]); ?> Вот код, он выдирает из html все линки, вывод на экран: HTML: Array ( [0] => [url=http://www.kuzbass.ru]http://www.kuzbass.ru[/url] [1] => [url=http://www.yandex.r]http://www.yandex.r[/url] [2] => [url=http://www.ya.ru]http://www.ya.ru[/url] [3] => google.r ) То есть, если url без кавычек, то выражение обрубает последний символ и выводит www.yandex.r ! !
Код (Text): /<a.*href=(?:'|\")?[^'\">]*(?:'|\")?>.*<\/a>/isU не проверял, но может поможет ? не понял зачем экранированные кавычки в основном тексте ? вроде подобная запись в чистом хтмлье не встречается ? но если действительно надо Код (Text): /<a.*href=(?:'|\"|\\\")?[^'\">]*(?:'|\"|\\\")?>.*<\/a>/isU
В основном тексте экранированные кавычки только для того, чтобы переменной $html присвоить, иначе ошибка будет, в переменно $html они не экранированны. Код (Text): /<a.*href=(?:'|\"|\\\")?[^'\">]*(?:'|\"|\\\")?>.*<\/a>/isU Выдает PHP: Array ( [0] => Array ( [0] => <a href='http://www.kuzbass.ru'>olo</a> [1] => <a href=http://www.yandex.ru>olo</a> [2] => <a href="http://www.ya.ru">olo</a> [3] => <a href=google.ru>olo</a> ) ) Код (Text): А нужно только доменные имена выделить, у меня к сожалению, знаний пока не хватает по регулярным выражениям.
нужно в результате в массиве иметь Код (Text): http://www.kuzbass.ru http://www.yandex.ru http://www.ya.ru google.ru
Код (Text): preg_match_all('/href=("|\')(http:\/\/)?(www\.)?('. SITE_NAME .')?\/[-\w\?\.\/&]*?("|\')/iu',$text,$links,PREG_PATTERN_ORDER); вариант рабочий и выдергивает ссылки не только из тегов 'a', а так же из конструкций 'document.location.href="#", но он ограничен конкретным сайтом Код (Text): preg_match_all('/href=("|\')(http:\/\/)?(www\.)?([^\/]*)?\/[-\w\?\.\/&]*?("|\')/iu',$text,$links,PREG_PATTERN_ORDER); так должен все сайты ловить
Вот рабочий вариант получился, всем спасибо, на всякий случай выкладываю PHP: <?php function clear_array_empty($array) { $ret_arr = array(); foreach($array as $val) { if (!empty($val)) { $ret_arr[] = trim($val); } } return $ret_arr; } $html=" <a href='http://www.kuzbass.ru'>olo</a> <a href=http://www.yandex.ru>olo</a> <a href=\"http://www.ya.ru\">olo</a> <a href=google.ru>olo</a> "; $text = $html; preg_match_all('#<a[^>]+ href\s*=\s*(?(?=[\'\"]) ([\'\"])(.+?)\\1 | ([^\s>]+) ) [^>]*>#isx',$text,$links,PREG_PATTERN_ORDER); $result = array_merge ($links[2], $links[3]); $result=clear_array_empty(array_unique($result)); print_r($result); ?>