当我查看本地主机页面时,我有此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">
任何帮助将不胜感激!
答案 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);