删除错误标签的最佳方法是什么?
如果标记包含在同一标记
中,则标记错误例如,这一行
<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>
答案 0 :(得分:0)
这个问题几乎涵盖了您需要了解的所有内容:RegEx match open tags except XHTML self-contained tags
它的长短:你不能使用正则表达式。你&#34;可能&#34;但它会如此复杂以至于会在代码中的其他地方产生问题。修剪你的代码库,运行html净化器,xml解析器或其他类似的东西。正则表达式可能是您的问题的错误解决方案。
答案 1 :(得分:0)
你可以使用这种模式:
(<(.+)>)(.+?)(<\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个或更多级别的嵌套。