0

次のHTMLコードでFIESTAERASMUSans / event/83318という単語を抽出する必要があります

    <div id="tab-soiree" class=""><div class="soireeagenda cat_1">  
            <a href="/event/83318/" class="lienFly"><img src="http://www.parisbouge.com/img/fly/resize/100/83318.jpg" alt="fiesta erasmus" class="fly"></a>
                <ul>
                    <li class="nom"><h2><a href="/event/83318/">FIESTA ERASMUS</a> </h2></li>
                    <li class="genre" style="margin-bottom:4px;">
                    <a href="/soirees-etudiantes/paris/1/" style="color:inherit;" title="soirée étudiante">soirée étudiante</a>             </li>
                    <li class="lieu"><a href="/club/paris/10/duplex">Duplex</a></li>                <li class="musique">house, electro, r&b chic, latino, disco</li>
                    <li class="pass-label">pass</li>                </ul>
                      <a href="/club/paris/10/duplex" title="duplex"><img src="/img/salles/resize/50/10.jpg" alt="duplex" class="flysalle"></a>
                 <hr class="clearleft">
        </div>

私はこのようなものをテストしました

$PATTERN = "/\<div id="tab-soiree".*<a href="/event/(.*)/">(.*)</a>/"
preg_match($PATTERN, $html, $matches);

しかし、それは機能しません。

4

2 に答える 2

2

正規表現を使用してHTMLを解析することはありません。代わりに、PHP自体に組み込まれているDOM解析ツールを使用してください:http://php.net/manual/en/book.dom.php

HTMLが次の名前の変数からアクセス可能であると仮定します$html

$doc = new DOMDocument();
$doc->loadHTML( $html );

$item = $doc->getElementsByTagName("li")->item(0);
$link = $item->getElementsByTagName("a")->item(0);

echo $link->attributes->getNamedItem('href')->nodeValue;
echo $link->textContent;
于 2012-04-30T15:24:10.780 に答える
1

次のパターンをお勧めします。

$PATTERN = '%<h2><a href="(.*?)">(.*?)</a>[\s]+</h2>%i';
preg_match($PATTERN, $html, $matches);

この(.*?)部分は貪欲でないパターンです。つまり、パーサーは指定された文字列の最後まで到達しませんが"、この場合はその前で停止します。

また、正規表現する前にhtmlを前処理することもできます。つまり、パーツを削除するためにすべての改行を削除します[\s]+

ここでオンラインで試すことができます。

于 2012-04-30T15:27:29.827 に答える