我正在使用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 ( )
(一个空数组)。
任何人都可以为我提供正则表达式吗?我已经尝试过在线发电机,但它正好在我脑海中。干杯!
答案 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