我不确定为什么这不匹配。但是,假设有一整页html,我想要联系我们链接,无论链接中的文字是“联系我们”,“联系我们”,“联系”等等。
示例html:
<a href="contact.html">
Contact Us
</a>
这是我试图使用的preg_match,虽然它不匹配任何东西:
preg_match('/<a.*href="(.*)".*>.*contact.*<\/a>/is',$data,$matches);
匹配只是一个空数组
答案 0 :(得分:0)
这是因为。不匹配新行。将multi-line modifier(m)添加到正则表达式,它应该可以正常工作。
preg_match('/<a.*href="(.*)".*>.*contact.*<\/a>/ism',$data,$matches);
答案 1 :(得分:0)
这是一个严格的正则表达式,以确保您只匹配有效的<a href="#"></a>
标记。
$content = '<a href="contact.html">Contact Us</a>';
$regexp = "/<a\s[^>]*href=([\"\']??)([^\" >]*?)\\1[^>]*>(.*)contact(.*)<\/a>/siU";
preg_match_all($regexp, $content, $match, PREG_SET_ORDER);
如果你想抓取HTML页面,但不必编写长正则表达式然后测试它们。试试PHPQuery库。它允许您使用CSS样式选择器从HTML中提取数据。
修改强>
如何使用PHPQuery做同样的事情。
phpQuery::newDocument('<a href="contact.html">Contact Us</a>');
$links = pq('a:contains("Contact")');