Скребковый метод данных div с использованием регулярных выражений в PHP - PullRequest
0 голосов
/ 11 ноября 2011

Я хочу очистить данные div с помощью id id с удаленного сервера, используя curl. На самом деле это проблема регулярных выражений, у меня есть содержимое страницы в переменной, например:

$url = "http://www.google.co.in/";
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$content = curl_exec($ch);
curl_close($ch);

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

$content = "<div id="cat_list">
<h4>Browse by Category</h4>
<ul>
<li class="a"><a href="link1.php">category1</a></li>
<li class="b"><a href="link2.php">category2</a></li>
</ul>
</div>";

Мне нужны все названия категорий.

1 Ответ

0 голосов
/ 12 ноября 2011

Вот регулярное выражение, если вы хотите использовать его вместо парсера, поскольку он, возможно, быстрее и использует меньше служебных данных.

$content = <<<EOD
<div id="cat_list">
<h4>Browse by Category</h4>
<ul>
<li class="a"><a href="link1.php">category1</a></li>
<li class="b"><a href="link2.php">category2</a></li>
</ul>
</div>
EOD;

$categories = array();

if (preg_match('/<div id="cat_list">(.*?)<\/div>/is', $content, $cat_list)) {
    $matches = preg_match_all('/<li[^>]*><a href="([^"]+)">([^<]+)<\/a>/i', $cat_list[1], $cats);

    for ($i = 0; $i < $matches; ++$i) {
        $categories[$cats[2][$i]] = array('href' => $cats[1][$i], 'name' => $cats[2][$i]);
    }
}

var_dump($categories);

Результаты:

array(2) {
  ["category1"]=>
  array(2) {
    ["href"]=>
    string(9) "link1.php"
    ["name"]=>
    string(9) "category1"
  }
  ["category2"]=>
  array(2) {
    ["href"]=>
    string(9) "link2.php"
    ["name"]=>
    string(9) "category2"
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...