Получить список элементов тегов из div, используя preg_match - PullRequest
0 голосов
/ 13 марта 2012

У меня есть следующий div:

<div class="divClass">Language:
    <a href="http://www.some-site.com/something/something2/">EN</a>
    <a href="http://de.some-site.com/something/something2/">DE</a>
    <a href="http://es.some-site.com/something/something2/">ES</a>
    <a href="http://fr.some-site.com/something/something2/">FR</a>
    <a href="http://it.some-site.com/something/something2/">IT</a>
    <a href="http://nl.some-site.com/something/something2/">NL</a>
    <a href="http://pt.some-site.com/something/something2/">PT</a>
    <a href="http://ru.some-site.com/something/something2/">RU</a>
    <a href="http://gr.some-site.com/something/something2/">GR</a>
    <a href="http://cn.some-site.com/something/something2/">CN</a>
    <a href="http://pl.some-site.com/something/something2/">PL</a>
    <a href="http://se.some-site.com/something/something2/">SE</a>
</div>

И используя этот шаблон регулярных выражений:

/<div class="divClass"><a href="(.*)">(.*)<\/a><\/div>/i

Использовать в следующем выражении:

$out=preg_replace('/<div class="divClass"><a href="(.*)">(.*)<\/a><\/div>/i',replace_link(substr('$1', strpos('$1','com/')+1),'$2'),$out);

Мой preg_replace возвращает NULL. По сути, я хочу получить ссылку из тега A и его значение и заменить ссылки и значения тем, что получаю из моей функции replace_link.

Есть идеи, как это сделать?

Спасибо!

Ответы [ 2 ]

1 голос
/ 13 марта 2012

Вот как вы используете DomDocument : http://codepad.org/RxZ7URMB

// Create new DomDocument
$doc = new DomDocument();
$doc->loadHTML($html);

// Get all <a>
$anchors = $doc->getElementsByTagName('a');

foreach ($anchors as $a) {
    echo $a->getAttribute('href') . PHP_EOL;
}

Если вы хотите сделать еще один шаг и выполнить замену: http://codepad.org/diqRQhiZ

foreach ($anchors as $a) {
    $a->setAttribute('href', replace_link($a->getAttribute('href')));
}

echo $doc->saveHTML();
1 голос
/ 13 марта 2012

Ваше регулярное выражение не годится: оно соответствует только одному <a href=...> </a>, а вы предоставляете много.

Вы должны использовать что-то вроде:

/<div class="divClass">\(<a href="(.*)">(.*)<\/a>\)+<\/div>/i

(не уверен, что не-синтаксис в php)

И вы также должны иметь дело с пробелами (пробел, табуляция, конец строки) в ваших входных данных.Если вы уверены в своем вводе, вы можете использовать что-то вроде:

/<div class="divClass">[^<]*(<a href="(.*)">(.*)<\/a>[^<]*)+[^<]*<\/div>/i
...