在给定的 html 内容中,我需要 preg_match_all
<a>
标签与 href url、文本和数据名称属性组。
我将分享我卡住的当前工作场所。有人可以帮我吗?
HTML 内容:
<a data-name="something" href="google.ru">test</a>
<a href="http://link.com">text2</a>
<a class="external" href="https://example.com">text 4</a>
<a href='sterium.com'>text 66</a><a href="sterium.com" data-name="">aaa</a>
期望的输出:
$match[0]= '<a data-name="something" href="google.ru">test</a>';
$match[0][0] = 'google.ru';
$match[0][1] = 'test';
$match[0][2] = 'something';
$match[1]= '<a href="http://link.com">text2</a>';
$match[1][0] = 'http://link.com';
$match[1][1] = 'text2';
$match[2]= '<a class="external" href="https://example.com">text 4</a>';
$match[2][0] = 'https://example.com';
$match[2][1] = 'text 4';
$match[3]= '<a href=\'sterium.com\'>text 66</a>';
$match[3][0] = 'sterium.com';
$match[3][1] = 'text 66';
$match[4]= '<a href="sterium.com" data-name="">aaa</a>';
$match[4][0] = 'sterium.com';
$match[4][1] = 'aaa';
$match[4][2] = '';
DOMDocument
类,它更健壮。将字符串加载到 DOMDocument
中后,您可以搜索所有 a
标签,然后提取它们的 nodeValue
和 href
和 data-name
属性:
$doc = new DOMDocument();
$doc->loadhtml($str);
$anchors = $doc->getElementsByTagName('a');
$matches = [];
foreach ($anchors as $a) {
$matches[] = array($a->nodeValue, $a->attributes->getNamedItem('href')->nodeValue, $a->attributes->getNamedItem('data-name')?->nodeValue ?? '');
}
输出(用于您的示例数据):
Array
(
[0] => Array
(
[0] => test
[1] => google.ru
[2] => something
)
[1] => Array
(
[0] => text2
[1] => http://link.com
[2] =>
)
[2] => Array
(
[0] => text 4
[1] => https://example.com
[2] =>
)
[3] => Array
(
[0] => text 66
[1] => sterium.com
[2] =>
)
[4] => Array
(
[0] => aaa
[1] => sterium.com
[2] =>
)
)