Php 剥去末端</部门>;如果开始标记是断开的正则表达式

Php 剥去末端</部门>;如果开始标记是断开的正则表达式,php,regex,preg-replace,Php,Regex,Preg Replace,在过去有关stackoverflow的帖子中找不到有效的解决方案。如果开始标签断开,我需要剥去末端 例如,如果: div id=“某物”>某物 div class=“某物”>某物 div>Something PS我不喜欢使用htmlPurifier或重载函数。这些是我需要解决的唯一例子。只需一个简单的正则表达式即可。一种可能的方法是使用DOMDocument提供的自动修复程序: $html = <<<'LOD' div id="something">Something&l

在过去有关stackoverflow的帖子中找不到有效的解决方案。如果开始标签断开,我需要剥去末端

例如,如果:

div id=“某物”>某物

div class=“某物”>某物

div>Something


PS我不喜欢使用htmlPurifier或重载函数。这些是我需要解决的唯一例子。只需一个简单的正则表达式即可。

一种可能的方法是使用DOMDocument提供的自动修复程序:

$html = <<<'LOD'
div id="something">Something</div>

div class="something">Something</div>

div>Something</div>
LOD;

libxml_use_internal_errors(true);

$dom = new DOMDocument();
$dom->loadHTML('<root>' . $html . '</root>', LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);

echo substr($dom->saveHTML(), 6, -8);

孤立的结束标记会自动删除,孤立的
会被替换为html实体。

你不需要正则表达式,你只需要进行字符串搜索,如果它不包含“
”,就可以修复它,但是你最好使用像htmlPurifier这样的库。这些示例非常先进,可以通过字符串搜索来完成,但是如果有嵌套的div,比如
div>A div嵌套的div
,会怎么样呢?这更棘手@因为我真的需要使用htmlPurifier来支持上面的例子吗?看起来太过分了。@HasseBjörk不会有嵌套的div。对于上面的例子,我只需要一个简单的正则表达式。无论出于什么原因,我自己都无法理解。您的示例字符串是。问题太不清楚了,它们出现在什么上下文中,标记结构有多复杂,一般来说,当您必须修复HTML时,正确的答案是“在提供者一侧”。