1

だから私はhtmlファイルの内容を取得しています、そして私はhtml要素内から多次元配列に特定の情報を引き出したいです。問題は、正規表現の経験があまりないことです。

リストには多くのアーティストが含まれており、これが各アーティストのフォーマット方法です。

<li class="artist"><a href="*I NEED THIS PATH*">*AND THIS TEXT*</a></li>

これは私がこれまでに持っているものです:

$contents = file_get_contents('somefile.txt'); 
$artists = preg_split('/^<li class="artist"><a href="(.*)">(.*)<\/a><\/li>$/', $contents);
$artistInfo = array();

foreach( $artists as $artist ) :

    preg_match('/href="(.*)">/', $element, $matchPath); // link paths
    preg_match('/">(.*)<\/a><\/li>/', $element, $matchName); // artist names

    array_push( $artistInfo, array( $matchName, $matchPath ) ); // put info into array

endforeach;

print_r($artistInfo);

preg_splitが期待どおりに機能していないため、他のすべてが破棄されますが、preg_match式も正しいかどうかはわかりません。助けてください!

4

1 に答える 1

2

これには正規表現を使用しないでください。DOMDocumentあなたの友達です:

$artistInfo = array();
$dom = new DOMDocument;
$dom->loadHTML( file_get_contents('somefile.txt') );

$xPath = new DOMXpath($dom);

foreach ( $xPath->query('//li[@class="artist"]/a') as $anchor ) {
    $artistInfo[] = array(
        $anchor->textContent,
        $anchor->getAttribute('href')
    );
}

実際の動作はこちら: http://codepad.viper-7.com/NziHBo

于 2013-02-01T20:45:11.047 に答える