-1

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

示例 html:

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

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

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

Matches 只是一个空数组

4

2 回答 2

0

这是因为 。不匹配新行。将多行修饰符(m) 添加到正则表达式,它应该可以工作。

preg_match('/<a.*href="(.*)".*>.*contact.*<\/a>/ism',$data,$matches);
于 2013-01-22T17:09:48.923 回答
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")');
于 2013-01-22T17:12:30.760 回答