PHP正则表达:匹配联系我们链接

时间:2013-01-22 17:05:18

标签: php regex html-parsing

我不确定为什么这不匹配。但是,假设有一整页html,我想要联系我们链接,无论链接中的文字是“联系我们”,“联系我们”,“联系”等等。

示例html:

<a href="contact.html">
    Contact Us
</a>

这是我试图使用的preg_match,虽然它不匹配任何东西:

preg_match('/<a.*href="(.*)".*>.*contact.*<\/a>/is',$data,$matches);

匹配只是一个空数组

2 个答案:

答案 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")');