0

私は次のhtmlを持っています:

<span class="orig_line">
<a class="original" href="http://nucleify.org/">Nucleify <i class="externalLink icon-circle-arrow-right"></i></a>
&middot;

by <span class="author">Random Person</span>
&middot;
October 1, 2013
</span>

私はsourceforgeで利用可能なSimple HTML DOMパーサークラスを使用しています。私が使用しているサンプルコードは次のとおりです:

$newoutput = str_get_html($htmlCode);
$html  = new simple_html_dom();
$html->load($newoutput);
foreach($html->find('div#titlebar') as $date){
$n['date'] = $date->find('span.orig_line',0)->plaintext);
print $n['date'];
}

October 1, 2013スパン (.orig_line) からの日付テキストから、その中の HTML タグをさらに取り除き、テキストだけを取り除きたいだけなので、それを回避する方法を見つけることができません...

PS: SimpleHTMLDom クラスのみに固執し、phpQuery または DOMParsers は使用しません。

ありがとうございました。

4

1 に答える 1

2

「simple_html_dom」は正規表現に大きく基づいているため、次のように正規表現を使用してプレーンテキストで日付を一致させることができます。

require 'simple_html_dom.php';

$htmlCode = '
<div id="titlebar">
<span class="orig_line">
<a class="original" href="http://nucleify.org/">Nucleify <i class="externalLink icon-circle-arrow-right"></i></a>
&middot;

by <span class="author">Random Person</span>
&middot;
October 1, 2013
</span>
</div>';

$html  = new simple_html_dom();
$html->load($htmlCode);

foreach ($html->find('div#titlebar') as $date)
{
  $n = [];
  $plaintext = $date->find('span.orig_line', 0)->plaintext;
  preg_match('#[A-Z][a-z]+ \d{1,2}, \d{4}#is', $plaintext, $matches);
  $n['date'] = $matches[0];
  var_dump($n); # array (size=1) 'date' => string 'October 1, 2013' (length=15)
}
于 2013-10-16T20:57:23.573 に答える