0

我有这个字符串(在 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>

我想只保留最后一个divclassprojectDesc,使用preg_replaceand 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_replaceand regex

4

3 回答 3

2

您想div从该 HTML 字符串中提取最终结果吗?首先,不要使用 regex。在 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));
于 2013-11-06T14:58:33.867 回答
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;
于 2013-11-06T14:57:05.603 回答
1

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

/(<div class="projectDesc"\>.*?<\/div>)/ims
于 2013-11-06T14:57:05.780 回答