preg_mach() で取り出そうとした時に、結果が途中で途切れてしまった。
// HTML 読み込み
$domDocument = new DOMDocument();
$domDocument->loadHTML('test.html');
// 目標の文字列を取得
$domElement = domDocument->getElementById('target_data');
$text = $domElement->textContent;
echo $text; // "データ:ABC DEF HIJ"
// 文字列中から必要な部分を抽出
preg_match('/^データ:(.*)$/', $text, $matches);
// 取得できたかテスト
echo $matches[1]; // "ABC" <- "DEF HIJ" がない
原因は textContent の文字列中に改行コード \n が含まれていたためであった。
正規表現の . は「改行を除く任意の1文字」を表すため、
改行以前の部分だけにマッチしてしまっていた。
対象の文字列を Web ブラウザ上へ表示した場合、
\n が半角スペースとして表示されるため気付かなかった。
マッチングを行う前に str_replace() で改行コードを取り除くことで解決できた。
$text = str_replace("\n", '', $text);
---
DOM - PHP.net
http://jp2.php.net/manual/ja/book.dom.php
0 件のコメント:
コメントを投稿