使用preg_replace PHP删除其中的标签和元素

时间:2018-10-16 11:47:28

标签: php preg-replace

当我查看本地主机页面时,我有此HTML行

<a class="moz-txt-link-abbrevi=ated" href="http://www.test.com">Test</a>

我要删除

<a class="moz-txt-link-abbrevi=ated" href=3D"http://www.test.com">

几乎所有preg都将<a>之间的所有内容替换为空,因为最后我将使用字符串替换退出</a>,而我不能字符串替换该类因为其中的href总是不同的。

我已经尝试过

$outputstr = preg_replace('/<a[^>]*>.*?<\/a>/', '', $outputstr);

但是,当然,我的整个行都消失了,因为它删除了<a</a>之间的所有内容,而我所需要的只是没有类标记的内容。

有人能指出我正确的方向吗?

我尝试使用

$outputstr = str_replace('</a>','',$outputstr);取出我最后的</a>

然后

$outputstr = preg_replace('/<a[^>]*.*?\/>/', '', $outputstr);

希望删除

<a class=3D"moz-txt-link-abbrevi=ated" href=3D"http://www.test.com">

任何帮助将不胜感激!

4 个答案:

答案 0 :(得分:1)

您的最初尝试几乎是正确的。现在唯一需要做的是:为内容创建一个捕获组,然后使用对该组的向后引用作为替换:

$outputstr = preg_replace('/<a[^>]*>(.*?)<\/a>/', '$1', $outputstr);

请注意内容周围的圆括号。这将创建一个捕获组。在替换中,您将此捕获组称为$1

答案 1 :(得分:1)

要删除其中包含元素的开始标记,您将需要使用preg_replace函数,因为正如您所说的那样,href每次都不同,因此您不能对其使用str_replace。

$outputstr = preg_replace('/<a\s.+?>/', '', $outputstr);

将删除<a>及其之间的所有内容。

您的输出将是:www.test.com</a>

您现在需要做的就是使用一个简单的str_replace来删除结束标记,只需使用以下方法即可:

$outputstr = str_replace('</a>','',$outputstr);

答案 2 :(得分:0)

您可以做三件事,

1。爆炸

由于要删除直到“>”的部分并保留其余部分,因此可以爆炸并获取数组中的第二个元素。但是,我不知道您为什么要在结尾处保留“”。

$str = '<a class=3D"moz-txt-link-abbrevi=ated" href=3D"http://www.skyberate.nl">www.skyberate.nl</a>';

$arr = explode('>', $str);

echo $arr[1];

2。删除html标签

使用简单的peasy标签。这将删除“”部分。我希望您也想删除该部分。

$str = '<a class=3D"moz-txt-link-abbrevi=ated" href=3D"http://www.skyberate.nl">www.skyberate.nl</a>';

echo strip_tags($str);

3。正则表达式

我不建议这样做,因为它看起来会更慢并且更复杂。

干杯。

答案 3 :(得分:0)

要保留最后一半的标签,您可以像这样Doc: replacement并检查实时Demo

preg_replace('@<(\w+)\b.*?>(.*?</\1>)@si', '\2', $input);