4

私はこのような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);  

それは動作しません。

4

3 に答える 3

4

どのように取得しているのかはわかりませんが$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

ただし、HTML を正規表現で解析しようとしないことをお勧めします。代わりに、PHP DOM ドキュメントSimpleHTMLdomなどのライブラリを使用して、 HTML を適切に解析してください。

于 2012-12-25T18:37:54.433 に答える
1

これは私にとって完璧に機能しました:

preg_match_all('/<a href\="\/tags\/(.*?)\">.*?<\/a>, <\/li>/', $str, $matches);
echo implode(',', $matches[1]);

プリント: スポーツ、娯楽、おもしろい、コメディ、自動車

$this->page はおそらく空です。そのため、データが取得されていません。

正規表現で角かっこを 2 回入れるのはなぜですか? リンクの URL とテキストの両方に同じ単語が含まれています。

于 2012-12-25T18:30:53.390 に答える