1

重複の可能性:
正規表現は、XHTML自己完結型タグを除くオープンタグと一致します

外部のウェブサイトからデータを取得したいのですが。html文字列は次のようになります(imgタグの間にスペース/行の区切りがありません):

<img class="car-type231" src="/2f36b523259e9871bfade01983c9cc91.png" title="toyota"/>
<img class="car-type211" src="/0abc9b3ae3ba4bbcb6d3593fad6c1450.png" title="nissan"/>
<img class="car-type311" src="/4528e30bb510b4289121b4c70cb48ea3.png" title="bmw"/>
<img class="car-type332" src="/64575fee55553623896c7fd587a33ac3.png" title="mercedes"/>
<img class="car-type544" src="/a4f32dd95976d76704795c471c9a08b8.png" title="audi"/>
etc...

すべてのsrcパスをプルして、次のような配列を作成したいと思います。

$matches[0] = '/2f36b523259e9871bfade01983c9cc91.png';
$matches[1] = '/0abc9b3ae3ba4bbcb6d3593fad6c1450.png';
etc...

このパラメータでpreg_matchを使用してみ'#src="(.*?)"#'ましたが、すべてのhtmlが返されるため、機能しません。

どんな助けでもいただければ幸いです!

4

2 に答える 2

4

彼が来るポニー...

DOMDocument などのパーサーを使用します。

$dom = new DOMDocument();
$dom->loadHTML($html);
$imgs = $dom->getElementsByTagName('img');
$l = $imgs->length;
$srcs = []; // Array() in earlier versions of PHP
for( $i=0; $i<$l; $i++) {
    $srcs[$i] = $imgs->item($i)->getAttribute("src");
}
于 2012-10-16T00:27:46.737 に答える
0

適切なドキュメント/HTMLパーサーを使用する代わりにRegExを使用してこのようなものを引き出そうとすると、多くの不満を感じるでしょうが、この場合、HTMLは非常に単純なので、個人的にはRegExを使用しても問題はありません。シンプルでもあります。

これを試して:

preg_match_all('#src="(.*?)"#',$htmlstring,$matches);
print_r($matches[1]); //the array you want
于 2012-10-16T00:46:35.923 に答える