正则表达式模式的简单问题

时间:2011-03-24 22:59:28

标签: php regex

请帮我从此标记中获取链接和文字。必须包含<h3 class="post-title entry-title">,因为我需要来自该特定代码的链接。

<h3 class="post-title entry-title">
<a href="http://mymplogk.blogspot.com/2011/03/h_25.html">Text</a>
</h3>

到目前为止,我的工作是

<?php

$string = file_get_contents('http://www.domain.com');

$regex_pattern = "";

unset($matches);
preg_match_all($regex_pattern, $string, $matches);


foreach ($matches[0] as $paragraph) {
echo $paragraph;
echo "<br>";
}
?> 

提前谢谢

4 个答案:

答案 0 :(得分:2)

Don't使用正则表达式来解析HTML。这是个坏主意。使用HTML / XML解析器。由于您使用的是PHP,因此可以尝试使用PHP TidyDOMDocument。它会让你的生活更轻松

答案 1 :(得分:0)

我建议你使用DOMDocument和XPath从页面中提取url而不是使用regexp。

本教程为您介绍如何使用xpath和dom。 http://www.merchantos.com/blog/makebeta/php/scraping-links-with-php#php_dom

编辑: 如果你在firefox中使用firebug-addon,你可以在页面上检查你的元素,并复制它的xpath。

答案 2 :(得分:0)

正则表达式:

(?<=href=").+(?=")

应匹配href标签之间的任何内容

您可以在RegexStorm

中对此进行测试

答案 3 :(得分:0)

按照您的示例,此正则表达式将找到“http://mymplogk.blogspot.com/2011/03/h_25.html”和“文本”:

$regex_pattern = '/<h3[^>]+class\s*=\s*[\'"]post-title entry-title[\'"][^>]*>.*?<a[^>]+href\s*=\s*"([^"]+)"[^>]*>([^<]*)</s';

这匹配h3标记周围的单引号或双引号,并允许h3标记中的其他属性以及属性和值之间的可选空格。它还在$ string中多次匹配,例如

$string = '<h3 class="post-title entry-title">
<a href="http://mymplogk.blogspot.com/2011/03/h_25.html">Text</a>
</h3>
<p>doot</p>
<h3 class=\'post-title entry-title\'>
<a href="http://www.google.com/">More Text</a>
</h3>';