在一个给定的html内容中,我需要preg_match_all <a>
标签,其中包含href url、text和data-name属性。我将分享我目前坚持的工作场所。有人能帮我吗?
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] = '';
$re = '#<a.*(?:href=["|\'](.*?[^"\'])["|\'])>(.*)</a>#';
$str = '<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>';
preg_match_all($re, $str, $matches, PREG_SET_ORDER, 0);
// Print the entire match result
var_dump($matches);
1条答案
按热度按时间0pizxfdo1#
不要使用正则表达式来解析HTML。相反,使用内置的
DOMDocument
类,它更健壮。将字符串加载到DOMDocument
后,可以搜索所有a
标签,然后提取它们的nodeValue
、href
和data-name
属性:输出(用于示例数据):
Demo on 3v4l.org