我不知道为什么这不是匹配。但是让我们假设有一个完整的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 = "/<as[^>]*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")');