PHP preg_replace只保留一个具有特定类的div

时间:2013-11-06 14:52:46

标签: php regex preg-replace

我有这个字符串(在html中):

<div class="sliderImg">
    <img width="1000" height="666" src="/consultants/images/projectbank/simansi-vaseon.jpg">
    <img width="1000" height="666" src="/consultants/images/projectbank/oloklirosi-parkou.jpg">
    <img width="1000" height="666" src="/consultants/images/projectbank/inverters.jpg">
</div>

<div class="projectProperties">
    <ul>
        <li class="projCategory">Project category: <span class="text">Energy</span></li>
        <li class="projEntity">Entity: <span class="text">Bright Wind and Solar</span></li>
        <li class="projRegion">Region: <span class="text">Southwest</span></li>
        <li class="projYear">Year: <span class="text">2010</span></li>
        <li class="projStatus">Status: <span class="text">Complete</span></li>
        <li class="projContribution">Contribution: <span class="text">Study and construction</span></li>
    </ul>
</div>

<div class="projectDesc">
    <p>Duis lectus arcu, auctor scelerisque diam a, hendrerit sagittis risus. Donec eget urna metus. Nulla sapien felis, vehicula vel convallis et, facilisis a nunc. Donec ac diam ut nisl rutrum convallis. Phasellus pellentesque turpis sit nullam.</p>
</div>

我想使用divprojectDesc 仅保留最后preg_replace课程regex

<div class="projectDesc">
    <p>Duis lectus arcu, auctor scelerisque diam a, hendrerit sagittis risus. Donec eget urna metus. Nulla sapien felis, vehicula vel convallis et, facilisis a nunc. Donec ac diam ut nisl rutrum convallis. Phasellus pellentesque turpis sit nullam.</p>
</div>

我搜索了SO中的很多帖子,但是我找不到任何与我应该使用的regex相关的内容。如果只使用preg_replaceregex来实现这一目标,请指点我正确的方向吗?

3 个答案:

答案 0 :(得分:2)

您想从该HTML字符串中提取最终的div吗?首先,不要使用正则表达式。在HTML或XML上使用正则表达式可以增加药房的账单,以应对不可避免的后果。 (而且你仍然不会建立一种稳定可靠的HTML处理方式。)

最佳解决方案是使用专为处理HTML / XML而设计的PHP功能:DOMDocument

现在,您提交的HTML文档实际上是非法的,因为它有多个根元素。所以我打算将它包装在另一个标签中,以便操纵它。

$dom = new DOMDocument;
$dom->loadHTML('<body>' . $html . '</body>');

$xpath = new DOMXPath($dom);

$elements = $xpath->query('//div[@class="projectDesc"]');

$output = $dom->saveHTML($elements->item(0));

答案 1 :(得分:1)

请勿使用正则表达式来解析HTML

您想使用PHP Simple HTML DOM

$string = "your HTML block that you posted.";

$html = str_get_html($string);
$html->find('div[class=projectDesc]', 0)->innertext;

答案 2 :(得分:1)

此正则表达式将匹配您正在寻找的div

/(<div class="projectDesc"\>.*?<\/div>)/ims