繁体   English   中英

PHP:Preg_match_all将html提取到字符串中

[英]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 ,但是以下内容应该可以正常工作:

http://ideone.com/KhWkEg

<?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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM