Регулярное выражение для выбора текста ссылки

Рейтинг: 0Ответов: 2Опубликовано: 22.10.2014
<h2><a href="http://asdf-fsd.com/asdf/detail/fsasfsda/">Текст ссылки заголовка</a></h2>

Нужно выбрать текст ссылки-заголовка.
Накидал тут:

(?<=<h2><a href=")(.*?)(?=</a></h2>)

Но это выбирает ещё и ссылку, а мне нужно сделать так (выдаёт ошибку):

(?<=<h2><a href=".*">)(.*?)(?=</a></h2>)

Ответы

▲ 1Принят

Всё, это работает

include_once('phpQuery-onefile.php');
$html = file_get_contents('http://demo.phpost.net/posts/arte/57/qsdfgh.html');
phpQuery::newDocumentHTML($html, $charset = 'utf-8');

$result = array();
$result['title'] = pq('div.post-title')->find('h1')->text();

$result['img'] = array();
foreach (pq('div.post-contenido')->find('img') as $img) {
        $result['img'][] = pq($img)->attr('src');
}

$result['tags'] = array();
foreach (pq('div.tags-block')->find('a[rel=tag]') as $a) {
        $result['tags'][] = pq($a)->text();
}

print_r($result);
▲ 2

Пожалуйста, используйте HTML парсеры. Использовать регулярки для парсинга HTML - дурной тон. Вот хороший: simple_html_dom. Там будете добираться до элементов с помощью CSS селекторов. :)

/* Или file_get_html('http://link/'); */
$html = str_get_html('<h2><a href="http://asdf-fsd.com/asdf/detail/fsasfsda/">Текст  ссылки заголовка</a></h2>');
$html->find('h2 > a',0)->innertext // текст
$html->find('h2 > a',0)->href // ссылка