PHP:Preg_match_all将html提取到字符串中
我有如下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
<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);