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

PHP preg_replace只保留一个具有特定类的div,php,regex,preg-replace,Php,Regex,Preg Replace,我有以下字符串(html格式): 我在SO中搜索了很多帖子,但我找不到任何与我应该使用哪种regex相关的内容。您能告诉我正确的方向吗?如果仅使用preg\u replace和regex就可以做到这一点的话?不要使用正则表达式解析HTML 你想用 不要使用正则表达式解析HTML 你想用 此正则表达式将匹配您要查找的div /(<div class="projectDesc"\>.*?<\/div>)/ims /(.*)/ims 此正则表达式将匹配您要查找的div /(&

我有以下字符串(html格式):


我在SO中搜索了很多帖子,但我找不到任何与我应该使用哪种
regex
相关的内容。您能告诉我正确的方向吗?如果仅使用
preg\u replace
regex
就可以做到这一点的话?

不要使用正则表达式解析HTML

你想用


不要使用正则表达式解析HTML

你想用


此正则表达式将匹配您要查找的div

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

此正则表达式将匹配您要查找的div

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

您想从该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));
$dom=新的DOMDocument;
$dom->loadHTML('.$html'.');
$xpath=newdomxpath($dom);
$elements=$xpath->query('//div[@class=“projectDesc”]');
$output=$dom->saveHTML($elements->item(0));

您想从该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));
$dom=新的DOMDocument;
$dom->loadHTML('.$html'.');
$xpath=newdomxpath($dom);
$elements=$xpath->query('//div[@class=“projectDesc”]');
$output=$dom->saveHTML($elements->item(0));

为什么不使用正则表达式?我更喜欢答案:)但DOM解析器是如何解析HTML的?使用正则表达式,但它们已经用HTML编码了数百种不同的异常和可能性,并抽象了所有您不想编码的函数。@TiMESPLiNTER正则表达式不是这样的。解析是通过标记化来完成的。如果您真的感兴趣(注意,这很无聊),您可以在中阅读有关HTML5解析的内容。为什么不使用正则表达式?我更喜欢答案:)但DOM解析器如何解析HTML?使用正则表达式,但是他们用HTML编写了数百种不同的异常和可能性,并抽象了所有您不想编写的函数。@TimesPliner它不是用正则表达式编写的。解析是通过标记化来完成的。如果你真的感兴趣(注意这很无聊),你可以在中阅读有关HTML5解析的内容。谢谢!你帮了我很多…虽然我的HTML不是非法的。它是来自CMS的常规HTML字符串。家长包装是不必要的。@otinaai多么有趣:你说得对。它不是一个有效的HTML文档(尽管它当然是有效的HTML),我认为DOMDocument无法处理它。你说得对。当涉及希腊字符时,将
$dom->saveHTML($elements->item(0))
更改为
utf8\u解码($dom->saveHTML($elements->item(0)))
谢谢!你帮了我很多…虽然我的HTML不是非法的。它是来自CMS的常规HTML字符串。家长包装是不必要的。@otinaai多么有趣:你说得对。它不是一个有效的HTML文档(尽管它当然是有效的HTML),我认为DOMDocument无法处理它。你说得对。当涉及希腊字符时,将
$dom->saveHTML($elements->item(0))
更改为
utf8\u解码($dom->saveHTML($elements->item(0)))
$dom = new DOMDocument;
$dom->loadHTML('<body>' . $html . '</body>');

$xpath = new DOMXPath($dom);

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

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