preg_replace替换不完整的标签

时间:2013-07-23 18:04:56

标签: regex preg-replace

我正在尝试使用file_get_contents读取html页面。处理完数据后,有一些不完整的标签,例如:

</p><p> test test test test</p>

在这种情况下,没有<p>可以打开</p>

<font color="#333333">abc</font><div><p>go go go go </p>

在这种情况下,没有</div>关闭<div>

因此我想使用preg_replace删除所有这些不完整的标记,在我的示例中,应删除额外的</p><div>。我怎样才能做到这一点?这些标签可以是任何有效的html5标签。

2 个答案:

答案 0 :(得分:2)

首先,您需要了解XHTML中“格式正确的标记文档”的含义。 使用格式良好的标记,如果它们是备用的不成对标记,则不保证选择作为“起始端对(开放关闭)”的标记将是正确的标记。

其次,您需要构建一个循环,以便从标记类型的数组存储库中每次迭代调用每个标记。数组中的标记应为“文字”。 在测试标签存在之前,应该在循环中采用每个标签“length”int。

当找到标签对(打开关闭)的匹配时,preg match将该部分放入匹配,位置和长度的副本数组,然后从匹配的部分获取匹配的长度和它的起始位置。 preg匹配返回结果数组(在开发脚本时使用数组的调试打印输出)。

在每个打开的关闭对中,您需要执行相同操作的子循环来检查内部标记。

<强>梗概: 要构建这样一个系统作为自定义脚本,需要使用XML格式良好的文档解析器和调试器,并且具有任何有效的效率。如果它具有有效的效率,它将成为IDE的标记调试器。 祝你好运。

答案 1 :(得分:0)

您应该调查PHP Tidy扩展(http://php.net/manual/en/book.tidy.php)的使用。您可以使用Tidy根据您尝试验证的任何DOCTYPE清除格式错误的HTML。