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