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

PHP:Preg_match_all将html提取到字符串中,php,preg-match,Php,Preg Match,我有如下html: <ul id="video-tags"> <li><em>Tagged: </em></li> <li><a href="/tags/sports">sports</a>, </li> <li><a href="/tags/ent

我有如下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>
preg_match_all('/<a href\="\/tags\/(.*?)\">(.*?)<\/a>, <\/li>/', $this->page, $matches);
echo var_dump($matches);    
echo implode(' ', $tags);  
  • 标记:
  • ,
  • ,
  • ,
  • ,
  • ,
  • 更多
我怎样才能把体育、娱乐、搞笑、喜剧、汽车提取成字符串

我的php preg_match_如下所示:

  <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>
preg_match_all('/<a href\="\/tags\/(.*?)\">(.*?)<\/a>, <\/li>/', $this->page, $matches);
echo var_dump($matches);    
echo implode(' ', $tags);  
preg_match_all(“/(.*?,/”,$this->page,$matches);
echo var_dump($matches);
回波内爆(“”,$tags);

它不起作用。

这对我来说非常有效:

preg_match_all('/<a href\="\/tags\/(.*?)\">.*?<\/a>, <\/li>/', $str, $matches);
echo implode(',', $matches[1]);
preg_match_all(“/.*?,/”,$str,$matches);
回波内爆(',',$matches[1]);
版画:运动、娱乐、搞笑、喜剧、汽车

$this->page可能是空的,这就是您无法获取任何数据的原因


为什么在regexp中放两次括号?您的url和链接文本中的单词都相同。

我不确定您是如何从中获得
$this->page
的,但是以下内容应该与您期望的一样:

这个小正则表达式也是


preg_match_all(“| tags/[^>]*>”([^它如何“不起作用”?你得到了什么?错误?一个不同于你期望的字符串?它在做什么(或不做什么)?
$tags
应该是什么,它在哪里设置?我的变量转储看起来像这样:数组(3){[0]=>array(0){}[1]=>array(0){[2]=>array(0){}我期待的东西像:体育,娱乐,搞笑,喜剧,汽车内阵列或字符串显示
$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);