2013-03-23 4 views
-1

Я делаю скребок PHP и имею следующий фрагмент кода, который захватывает заголовок со страницы, просматривая промежуток uiButtonText. Однако я хочу теперь искать гиперссылку и иметь ее pregmatch <a href="*" class="thelink" onclick="*">(.*)</a>.Использование подстановочных знаков в Preg Match

Звезды, которые я хочу быть дикими картами, чтобы получить гиперссылку со страницы, даже если href и onclick изменяются для каждого из них.

if (preg_match("/<span class=\"uiButtonText\">(.*)<\/span>/i", $cache, $matches)){print($matches[1] . "\n");}else {}

Мой Полный код:

<?php 
$userAgent = 'Googlebot/2.1 (http://www.googlebot.com/bot.html)'; 
$url = "http://www.facebook.com/MauiNuiBotanicalGardens/info"; 
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_USERAGENT, $userAgent); 
curl_setopt($ch, CURLOPT_URL,$url); 
curl_setopt($ch, CURLOPT_FAILONERROR, true); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); 
curl_setopt($ch, CURLOPT_AUTOREFERER, true); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER,true); 
curl_setopt($ch, CURLOPT_TIMEOUT, 10); 
$html = curl_exec($ch); 
$cache = $html; 

if (preg_match("/<span class=\"uiButtonText\">(.*)<\/span>/i", $cache, $matches)) {print($matches[1] . "\n");}else {} 
?>` 
+2

использовать DOM, а не регулярные выражения – 2013-03-23 02:27:33

+0

типа google.com в адресная строка, поиск 'DOM Document в PHP'. – hjpotter92

+0

Спасибо за ответ, ребята, я все еще изучаю PHP, можно ли немного расширить? –

ответ

0

если вы хотите придерживаться с регулярным выражением, попробуйте следующее:

$html = '<span class="uiButtonText"><a href="http://google.com" class="thelink" onclick="#">Google!</a></span>'; 

preg_match("/<span class=\"uiButtonText\"><a href=\".*\" class=\"thelink\" onclick=\".*\">(.*)<\/a><\/span>/i", $html, $matches); 

print_r($matches[1]); 

Выход:
Google!

Лучше всего было бы использовать PHP Simple HTML DOM Parser и делать что-то вроде этого:

$html = file_get_html("http://www.facebook.com/MauiNuiBotanicalGardens/info"); 
foreach($html->find("a.thelink") as $link){ 
    echo $link->innertext . "<BR>"; 
} 

Выше не тестировался, но должен работать

Смежные вопросы