我不确定为什么这不匹配。但是假设有一整页的html,我想要联系我们链接,不管链接中的文本是“联系我们”、“联系我们”、“联系”等。
示例 html:
<a href="contact.html">
Contact Us
</a>
这是我尝试使用的 preg_match,虽然它不匹配任何东西:
preg_match('/<a.*href="(.*)".*>.*contact.*<\/a>/is',$data,$matches);
Matches 只是一个空数组
我不确定为什么这不匹配。但是假设有一整页的html,我想要联系我们链接,不管链接中的文本是“联系我们”、“联系我们”、“联系”等。
示例 html:
<a href="contact.html">
Contact Us
</a>
这是我尝试使用的 preg_match,虽然它不匹配任何东西:
preg_match('/<a.*href="(.*)".*>.*contact.*<\/a>/is',$data,$matches);
Matches 只是一个空数组
这是因为 。不匹配新行。将多行修饰符(m) 添加到正则表达式,它应该可以工作。
preg_match('/<a.*href="(.*)".*>.*contact.*<\/a>/ism',$data,$matches);
这是一个严格的正则表达式,以确保您只匹配有效的<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")');