Вытащить ссылки из списка в php - PullRequest
1 голос
/ 14 декабря 2011
<li class="page_item page-item-6"><a href="http://localhost/wordpress1006/?page_id=6">About us</a></li> 
<li class="page_item page-item-12"><a href="http://localhost/wordpress1006/?page_id=12">Contact</a></li> 
<li class="page_item page-item-10"><a href="http://localhost/wordpress1006/?page_id=10">Portfolio</a></li> 
<li class="page_item page-item-8"><a href="http://localhost/wordpress1006/?page_id=8">Services</a></li> 

Мне нужно тянуть ссылки только из этого списка, я бы использовал регулярные выражения, но я слишком напуган, чтобы пытаться. Таким образом, номера будут меняться в конце page_item page-item-number

что бы вы предложили мне сделать здесь?

Заранее спасибо

Ответы [ 2 ]

2 голосов
/ 14 декабря 2011

Я думал, что это будет интересно ответить.Итак, вот решение о том, как извлечь URL из HTML без регулярного выражения.

$html = '
    <li class="page_item page-item-6"><a href="http://localhost/wordpress1006/?page_id=6">About us</a></li> 
    <li class="page_item page-item-12"><a href="http://localhost/wordpress1006/?page_id=12">Contact</a></li> 
    <li class="page_item page-item-10"><a href="http://localhost/wordpress1006/?page_id=10">Portfolio</a></li> 
    <li class="page_item page-item-8"><a href="http://localhost/wordpress1006/?page_id=8">Services</a></li>
';
$tidy = new tidy();
$tidy->parseString($html);
$dom = new DOMDocument();
$dom->loadHTML($tidy->html());
$links  = $dom->getElementsByTagName('a');

$matches = array();
foreach ($links as $link) {
    $matches[] = $link->attributes->getNamedItem('href')->value;
}

var_dump($matches);
array(4) {
  [0]=>
  string(41) "http://localhost/wordpress1006/?page_id=6"
  [1]=>
  string(42) "http://localhost/wordpress1006/?page_id=12"
  [2]=>
  string(42) "http://localhost/wordpress1006/?page_id=10"
  [3]=>
  string(41) "http://localhost/wordpress1006/?page_id=8"
}
2 голосов
/ 14 декабря 2011

Попробуйте это:

$matches = array();
$string = '
    <li class="page_item page-item-6"><a href="http://localhost/wordpress1006/?page_id=6">About us</a></li> 
    <li class="page_item page-item-12"><a href="http://localhost/wordpress1006/?page_id=12">Contact</a></li> 
    <li class="page_item page-item-10"><a href="http://localhost/wordpress1006/?page_id=10">Portfolio</a></li> 
    <li class="page_item page-item-8"><a href="http://localhost/wordpress1006/?page_id=8">Services</a></li> 
';
preg_match_all('/href="(.*?)"/i', $string, $matches);
var_dump($matches[1]);

Вывод:

array
  0 => string 'http://localhost/wordpress1006/?page_id=6' (length=41)
  1 => string 'http://localhost/wordpress1006/?page_id=12' (length=42)
  2 => string 'http://localhost/wordpress1006/?page_id=10' (length=42)
  3 => string 'http://localhost/wordpress1006/?page_id=8' (length=41)

(обратите внимание, что это не удастся для более сложного HTML, и в этом случае я больше не буду использовать Regex, скорее что-то вроде Простой HTML DOM )

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...