<div class="apple">
<a href="..." > ... </a>
<div class="boy">
(some content here)
</div>
<div class="cat">
<b>Text One.</b> <br> <i>Text Two.</i>
</div>
<div class="dog">
<b>Text One.</b> <br> <i>Text Two.</i>
</div>
</div>
.
. (and there are couple more structure with cat class inside but not necessarily under the class apple)
.
<div class="zoo">
.
<div class="cat">
<b>Text One.</b> <br> <i>Text Two.</i>
</div>
.
</div>
.
.
.
我正在使用PHP。 我想知道如何准确选择&#34; Text One。&#34;只来自div class =&#34; cat&#34; under div class =&#34; apple&#34;超出HTML(但不是来自任何其他)。
Currnetly我正在做这样的事情:
$html=file_get_contents('xxx.html');
$a=preg_match_all("/\<div class\=\"apple\"(.*)\<div class\=\"cat\"\>(.*)<\/b\>/s",$html,$b);
foreach ($b[1] as $value) {
echo strip_tags("$value");
}
我刚刚在网上找到它,它可能是可能但不是最适合的情况。
许多不相关的内容也被选中(我得到了最后一个标签内的所有内容,比我想要的更多内容)
请建议我适当的正则表达式或更好的解决方法。
答案 0 :(得分:0)
由于您提到了更好的方法,我建议您使用simple html dom
库,http://simplehtmldom.sourceforge.net。
在你的例子中,你会像这样使用它:
<?php
include 'simple_html_dom.php';
$html = str_get_html('<div class="apple">
<a href="..." > ... </a>
<div class="boy">
(some content here)
</div>
<div class="cat">
<b>Text One.</b> <br> <i>Text Two.</i>
</div>
<div class="dog">
<b>Text One.</b> <br> <i>Text Two.</i>
</div>
</div>
.
. (and there are couple more <div class="apple"> structure with cat class inside)
.
<div class="apple">
.
.
.
</div>
.
.
.');
$text = $html->find('div.cat b',0)->innertext;
print $text . PHP_EOL;
// it will print this
// Text One.