0
  • URL から自分のサイトへの最初の投稿コンテンツを取得したい。そして、ここに私が取得する必要があるURLがあります:

http://www.vietvbb.vn/up/forumdisplay.php?f=15

  • だから私はfirebugを使ってやった。そして、このhtmlコードの間に最初の投稿コンテンツを取得する必要があります:

    <td id="td_post_11229294" class="alt1" style="border-right: 0px solid #262626"><--content that i need--></td>
    
  • そして、私はこのようにしました:

        $url = 'http://www.vietvbb.vn/up/showthread.php?t=65690';
    $data = file_get_contents($url);
    preg_match('/<td class="alt1" id="td_post_(.*?)">\r\n(.*?)\r\n<\/td>/s', $data, $tc);echo '<pre>';print_r($tc);echo '</pre>';
    
  • しかし、ご覧のとおり、td タグで本当に必要なことが返されるだけでなく、td タグの最初のコンテンツ投稿と、id=postmenu_xxx の div タグと class=tborder のテーブル タグの両方が返されます (この div と table は、私が必要としないものです)

    <div id="postmenu_11229294_menu" class="vbmenu_popup" style="display:none">.....</div>
    <table class="tborder" cellspacing="0" cellpadding="3" border="0" align="center" width="100%">....</table>
    
  • 上記のように td タグの間のコンテンツを返すだけです。それで、どうすればいいですか?

4

1 に答える 1

0

おそらく、preg_match に次のようなものが必要です。

preg_match("/<td id=\"td_post_\d+[^>]+>([^<]+)<\/td>/",$var,$between);

ID td_post_ に 1 つ以上の数字を加えた開始 td タグを探し、1 つ以上の非終了タグ文字に一致し、非開始タグ文字のキャプチャを開始します。

上記は単純なケースで機能します (td タグ内に他のタグが埋め込まれていないことを前提としています)。より洗練されたものが必要な場合は、車輪の再発明を試みるのではなく、おそらく DOM を適切に解析できるモジュールを使用する必要があります。

編集: 解析しようとしているコンテンツが (エラー メッセージから) 適切に形成されていないように思えますが、必要なものを取得できないわけではありません。たとえば、JQuery には、その td タグ内のコンテンツを取得できる強力な DOM 解析関数があります。

とはいえ、以下のような具体的ではない正規表現をいつでも試すことができますが、適切なパーサーの代わりにはなりません。

preg_match("/<td id=\"td_post_\d+[^>]+>(.+?)<\/td>/",$var,$between);
于 2012-07-22T05:30:33.890 に答える