2009-07-28 74 views
0

我有这种情况。我在使用PHP阅读html页面使用这段代码$body = file_get_contents('index.htm');如何使用PHP删除HTML页面中的一段HTML标记

现在在index.htm文件中是一段如下所示的html代码,我有时需要删除/取决于条件,所以有时需要删除和其他时间不。

<td><table><tr><td></td></tr></table></td> 

如何删除使用PHPTD标签之间的整个部分。

回答

1

一种方式做到这一点可以

$str = '<td><table><tr><td></td></tr></table></td>'; 
preg_match('/(<td>)(<table>.*<\/table>)(<\/td>)/',$str,$matches); 

结果数组

Array 
(
    [0] => <td><table><tr><td></td></tr></table></td> 
    [1] => <td> 
    [2] => <table><tr><td></td></tr></table> 
    [3] => </td> 
) 

可用于重建

'<td></td>' 

不表款

2

如果你足够幸运,你的页面是XML,那么你可以形成一个DOM,并从DOM中删除。否则,只要你没有嵌套<table>s(在这种情况下它仍然可能,但更棘手),正则表达式应该很容易。

+0

如果您使用递归环视,也可以在嵌套中获得。 – eyelidlessness 2009-07-28 10:04:48

+0

呃,递归*和*看起来。当然,这些并不是严格的“常规”,它们是PCRE的扩展。 – eyelidlessness 2009-07-28 10:05:23

1

你可以删除t他之间td的使用正则表达式替换。如果您有属性在或在您的

我没有尝试过自己(RegEx Tester)和它的作品,希望它也适用于您

$html=preg_replace('/<td([^>]*)><table[^>]*>.*<\/table><\/td>/', '<td$1></td>', $html); 

这也适用。