我有这个html数据,我试图从下面的div元素中提取第一个href值。
<div>blah blah.
<a href="http://www.example.com">example</a>
<a href="http://www.example2.com">site</a>
</div>
我尝试使用这个正则表达式,但我无法弄清楚我哪里出错了?
preg_match('/<div>.*?<a.*"(.*)">/', $html, $match);
有人可以提出更好的方法吗?
答案 0 :(得分:3)
使用正确的tool作为作业,而非正则表达式。
$dom = DOMDocument::loadHTML('
<div>blah blah.
<a href="http://www.example.com">example</a>
<a href="http://www.example2.com">site</a>
</div>
');
$xpath = new DOMXPath($dom);
$link = $xpath->query("//div/a")->item(0);
echo $link->getAttribute('href'); //=> "http://www.example.com"
答案 1 :(得分:0)
请参阅hwnd的答案,使用更舒适,更精确的方式。
要真正使用正则表达式来执行您的请求,您可以使用这样的方法:
<div>.*?<a[^>]+href="([^"]*)"
还是要说:
答案 2 :(得分:0)
x="<div>blah blah.\n\t<a href="http://www.example.com">example</a>\n\t<a href="http://www.example2.com">site</a>\n</div>"
import re
pattern=re.compile(r".*? href=(\S+?)>.*?",re.DOTALL)
y=pattern.match(x).groups()
print y[0]
输出:&#34; http://www.example.com&#34;
答案 3 :(得分:-1)
你可以试试这个
preg_match('/<div>[^<]*?<a[^>]*\"([^>]*?)\"/', $html, $match);
var_dump($match);