删除错误标签的最佳方法是什么?
如果标签包含在同一标签
中,则标签是错误的
例如,这行
<q>+7</q> (<q><q>9</q>6</q><q>2</q>) <q>9</q><q>3</q><q>7</q> <q>4</q><q>2 2</q><q>4</q>
删除错误标签后:
<q>7</q> (<q>96</q><q>2</q>) <q>9</q><q>3</q><q>7</q> <q>4</q><q>2 2</q><q>4</q>
不止这个简单的例子:
:
<p>bla-bla <p>bla-bla</p> bla-bla</p>
:后<p>bla-bla bla-bla bla-bla</p>
这个问题几乎涵盖了您需要知道的所有内容:RegEx匹配打开标记,除了XHTML自包含标记
它的长和短:你不使用正则表达式。你"可以",但它太复杂了,可能会在代码的其他地方产生问题。要么精简代码库,运行html净化器、xml解析器,要么执行其他操作。对于您的问题,Regex可能是错误的解决方案
你可以使用这个模式:
(<(.+)>)(.+?)(<'2>)(.*?)(<'/'2>)(.*?)(<'/'2>)$
和替换字符串为
$1$3$5$7$8
我相信你可以在PHP上做到这一点
echo preg_replace("(<(.+)>)(.+?)(<''2>)(.*?)(<''/''2>)(.*?)(<''/''2>)$", "$1$3$5$7$8", "<p>bla-bla <p>bla-bla</p> bla-bla</p>");
你可以在这里看到一个正则表达式的实例http://regexr.com/3e8o3
一个重要的注释是,你可能需要在一个while循环中调用这个,直到正则表达式停止匹配,因为这个正则表达式不是递归的,所以这将不适用于3层或更多的嵌套。