0

以下の記述形式のページの記述を抽出したい。自分が正しいと信じていても、理解できません。

$file_string = file_get_contents('');

preg_match('/<div class="description">(.*)<\/div>/i', $file_string, $descr);
$descr_out = $descr[1];

echo $descr_out; 


<div class="description">
<p>some text here</p>
</div>
4

2 に答える 2

3

正規表現で単一行モードを有効にする必要があるようです。-s フラグを追加するように変更します。

preg_match('/<div class="description">(.*)<\/div>/si', $file_string, $descr);

シングル ライン モードでは、. 改行文字に一致する文字。これがないと、 .* は開始 div タグと終了 div タグの間にある改行と一致しません。

于 2012-07-31T13:42:32.340 に答える
1

DOMDocumentクラスとxpathを使用して、HTML ドキュメントからランダムな部分を抽出することをお勧めします。正規表現ベースのソリューションは、入力の変更 (余分な属性の追加、奇妙な場所への空白など) に対して非常に脆弱であり、より複雑なシナリオでも読み取り可能です。

$html = '<html><body><div class="description"><p>some text here</p></div></body></html>';
// or you could fetch external sites 
// $html = file_get_contents('http://example.com');

$doc = new DOMDocument();
// prevent parsing errors (frequent with HTML)
libxml_use_internal_errors(true);
$doc->loadHTML($html);
// enable back parsing errors as the HTML document is already parsed and stored in $doc
libxml_use_internal_errors(false);
$xpath = new DOMXpath($doc);

foreach ($xpath->query('//div[@class="description"]') as $el) {
    var_dump($el->textContent);
}
于 2012-07-31T13:51:25.320 に答える