正则表达式解析帖子的标题

时间:2010-01-05 18:32:32

标签: php regex

我正在使用cURL来抓取一个页面,我想要解析帖子的标题(链接上显示的实际文本,而不是<a>的title属性。)

HTML是这样的:

<li class="topic">
    <a title="Permanent Link to Blog Post" rel="bookmark" href="http://www.website.com/blog-post/">Title of blog post</a>
</li>

我尝试使用此代码:

preg_match('/<\a title=\".*\" rel=\"bookmark\" href=\".*\">.*<\/a>/', $page, $matches);

但它不起作用,PHP返回Array ( )(一个空数组)。

任何人都可以为我提供正则表达式吗?我已经尝试过在线发电机,但它正好在我脑海中。干杯!

4 个答案:

答案 0 :(得分:1)

在表达式中添加括号:

'/<a title=".*" rel="bookmark" href=".*">(.*)<\/a>/'

( )之间的所有内容都将在数组中返回。

修改

您必须删除引号前的所有退格键。

<强> EDIT2:

刚刚在documentation for preg_match

中看到过
  

如果提供了matches,则会填充搜索结果。 $ matches [0]将包含与完整模式匹配的文本,$ matches 1将具有与第一个捕获的带括号的子模式匹配的文本,依此类推。

您还应该test your expression添加示例文本,以确保它确实能够执行您想要执行的操作。

答案 1 :(得分:0)

假设您需要该属性,您可以使用:

if (preg_match('/<a\s+[^>]*?\btitle="(.+?)"/', $page, $matches)) {
    echo $matches[1], "\n";
}

解析HTML可能很棘手,而正则表达式在一般情况下无法胜任工作。对于简单,理智的文档,你可以逃脱它。

请注意,你是用锤子开螺丝。

答案 2 :(得分:0)

$str = '<li class="topic"> <a title="Permanent Link to Blog Post" rel="bookmark" href="http://www.website.com/blog-post/"> Title of blog post</a> </li>; `

echo strip_tags($ str);

给出:

博客文章的标题

答案 3 :(得分:0)

这是另一种方式

$str = <<<A
<li class="topic">
    <a title="Permanent Link to Blog Post" rel="bookmark" href="http://www.website.com/blog-post/">Title of blog post</a>
</li>
A;
$s = explode("</a>",$str);
foreach ($s as $a=>$b){
    if(strpos($b,"<a title")!==FALSE){
        $b=preg_replace("/.*<a title.*>/ms","",$b);
        print $b;
    }
}

输出

$ php test.php
Title of blog post