html — совпадение регулярного выражения с использованием preg match all в Stack Overflow

У меня есть такая строка

<a href="http://www.example1.com"><b>12345</b> - John George<br><span>some_text1</span></a>
<a href="http://www.example2.com"><b>67890</b> - George Jerry<br><span>some_text2</span></a>

Используя preg_match_all (PHP), я хочу иметь возможность извлечь URL, ID и имя, но я не понял, хорошо sPattern (смотрите ниже):

$sPattern = "/<a href=\"(.*?)\"><b>(.*?)<\/b>\" - (.*?)\"<br>(.*?)/";
preg_match_all($sPattern, $content, $aMatch);

0

Решение

Я скромно предлагаю использовать HTML-парсер, как DOMDocument вместо:

$html = '<a href="http://www.example1.com"><b>12345</b> - John George<br><span>some_text1</span></a>
<a href="http://www.example2.com"><b>67890</b> - George Jerry<br><span>some_text2</span></a>';

$dom = new DOMDocument();
$dom->loadHTML($html);
$anchors = $dom->getElementsByTagName('a');
$data = array();
foreach($anchors as $anchor) {
$href = $anchor->nodeValue; // get the anchor href
$b = $anchor->firstChild->nodeValue; // get the b tag value
$data[] = array('href' => $href, 'id' => $b);
}

echo '<pre>';
print_r($data);
2

Другие решения

Вероятно, лучше, если вы напишите более конкретные шаблоны, попробуйте этот:

$sPattern = "/<a href=\"([ˆ"]+)\"><b>(\d+)<\/b> - ((\w+ )*\w+)<br><span>([^<]+)<\/span><\/a>/";
1

По вопросам рекламы [email protected]