[英]PHP: Preg_match_all to extract html into string
我有这样的HTML:
<ul id="video-tags">
<li><em>Tagged: </em></li>
<li><a href="/tags/sports">sports</a>, </li>
<li><a href="/tags/entertain">entertain</a>, </li>
<li><a href="/tags/funny">funny</a>, </li>
<li><a href="/tags/comedy">comedy</a>, </li>
<li><a href="/tags/automobile">automobile</a>, </li>
<li>more <a href="/tags/"><strong>tags</strong></a>.</li>
</ul>
如何提取体育,娱乐,搞笑,喜剧,汽车等信息
我的php preg_match_all看起来像这样:
preg_match_all('/<a href\="\/tags\/(.*?)\">(.*?)<\/a>, <\/li>/', $this->page, $matches);
echo var_dump($matches);
echo implode(' ', $tags);
这是行不通的。
我不确定您如何从中获得$this->page
,但是以下内容应该可以正常工作:
<?php
$page = 'subject string ...';
preg_match_all('/<a href\="\/tags\/(.*?)\">(.*?)<\/a>, <\/li>/', $page, $matches);
echo implode(', ', $matches[1]);
?>
将$page
变量替换为$this->page
$page
变量,只要它仍然是字符串即可。
但是,我建议不要尝试使用正则表达式解析HTML 。 而是使用PHP DOM文档或SimpleHTMLdom之类的库来正确解析HTML。
这个小的正则表达式也做同样的事情 。
preg_match_all('|tags/[^>]*>([^<]*)|', $str, $matches);
还使用DOMDocuemnt。
$d = new DOMDocument();
$d->loadHTML($str);
$as = $d->getElementsByTagName('a');
$result = array();
for($i=0;$i<($as->length-1); $i++)
$result[]=$as->item($i)->textContent;
echo implode(' ', $result);
这对我来说非常有效:
preg_match_all('/<a href\="\/tags\/(.*?)\">.*?<\/a>, <\/li>/', $str, $matches);
echo implode(',', $matches[1]);
打印:体育,娱乐,搞笑,喜剧,汽车
$ this-> page可能为空,这就是为什么您没有获取任何数据的原因。
为什么要在正则表达式中放两次括号? 您在链接的url和文本中都有相同的单词。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.