使用包含特定id或classes属性的PHP删除元素

时间:2015-02-11 16:54:51

标签: php arrays regex preg-replace

我有一个简单的问题,我没有找到答案。

我有这个简单的HTML代码:

<div class="iWantThisElement">
Not Delete this one
</div>
...
<div class="itemx">
Delete This
</div>
...
<span id="xxitemsxx">
Delete This
</span>
...
<div class="delete">
Delete This
</div>
...
<h2 id="deleteThisOneToo">
Delete This
</h2>
...
<div class="Iwantthis">
Not Delete this one
</div>

我希望有一条规则可以删除所有 id 包含特定单词或单词的元素。例如,我想删除类或ids用这些词:

itemx,xxitemsxx,deleteThisOneToo,删除

所以,我们可以有这样一个数组:

$array = array("item","delete");

以及任何元素(如h2divspan等),其中包含 id ,必须删除。

那个html的输出必须是这样的:

<div class="iWantThisElement">
Not Delete this one
</div>
...
...
...
...
...
<div class="Iwantthis">
Not Delete this one
</div>

我用preg_replace和模式尝试了很多代码但我无法解决它。

我们怎么能在php中做到这一点?用最好最快的方式?

感谢。

1 个答案:

答案 0 :(得分:0)

this课程中搜索div

/<[^<]+class=[^>]+this[^>]+>[^<]+<\/div>/img

this id:

中搜索div

/<[^<]+id=[^>]+this[^>]+>[^<]+<\/div>/img

最后是class,id和任何标记的示例:

$source = "<div..."; // your html markup
$find_word = "this";
$class_pattern = array("/<[^<]+class=[^>]+", "[^>]+>[^<]+<\/[a-z]+>/i");
$id_pattern = array("/<[^<]+id=[^>]+", "[^>]+>[^<]+<\/[a-z]+>/i");
$result = preg_replace($class_pattern[0].$find_word.$class_pattern[1], "", $source);
$result = preg_replace($id_pattern[0].$find_word.$id_pattern[1], "", $result);

样本: http://sandbox.onlinephpfunctions.com/code/2f64fae1d6cbaa0efc7e777e653097891a43113d