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

PHP正则表达式:匹配的联系我们链接,php,regex,html-parsing,Php,Regex,Html Parsing,我不知道为什么这不匹配。但是假设有一整页的html,我想要联系我们链接,不管链接中的文本是“联系我们”、“联系我们”、“联系”等等 示例html: <a href="contact.html"> Contact Us </a> 下面是我尝试使用的preg_匹配,尽管它与任何内容都不匹配: preg_match('/<a.*href="(.*)".*>.*contact.*<\/a>/is',$data,$matches); preg

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

示例html:

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

下面是我尝试使用的preg_匹配,尽管它与任何内容都不匹配:

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

Matches只是一个空数组,这是因为。与新线不匹配。将(m)添加到正则表达式中,它应该可以工作

preg_match('/.*contact.*/ism',$data,$matches);

这里有一个严格的正则表达式,确保只匹配有效的
标记

 $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);
$content='';
$regexp=“/library a try。它允许您使用CSS样式选择器从HTML提取数据

编辑:

如何对PHPQuery执行相同的操作

 phpQuery::newDocument('<a href="contact.html">Contact Us</a>');
 $links = pq('a:contains("Contact")');
phpQuery::newDocument(“”);
$links=pq('a:contains(“Contact”));

hmm,我以为/s修饰符就是为了这个,这似乎对我的示例html有效,但我试图从中获取链接的网页事实上并不奇怪。如果我从页面中获取html块并将其放入$data中,它匹配得很好,但是对于$data中的整个html页面,它与任何内容都不匹配,这是因为您的正则表达式太贪婪了太多了!我该怎么做才能让它不那么贪婪?不,这不是我想要的。联系人链接将取自许多不同的网页。因此匹配的css将不起作用。否则我会使用xpathPHPQuery使用CCS3选择器,它们非常灵活。它可以很容易地找到你需要的。谢谢,我今天会看看这个。Regex一直都是对我来说,编程中最困难的事情之一。这个概念是有道理的,但像这个例子一样,有时会让人感到痛苦。不要使用正则表达式来解析HTML。你无法用正则表达式可靠地解析HTML。一旦HTML与你的期望值发生变化,你的代码就会被破坏。有关如何推动HTML的示例,请参阅使用PHP模块解析HTML。