我有这个字符串(在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>
我想使用div
和projectDesc
仅保留最后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_replace
和regex
来实现这一目标,请指点我正确的方向吗?
答案 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