Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 正则表达式删除链接,但不在img标记内_Php_Regex - Fatal编程技术网

Php 正则表达式删除链接,但不在img标记内

Php 正则表达式删除链接,但不在img标记内,php,regex,Php,Regex,我经营一个邮寄网站。我设置了正则表达式来替换html电子邮件正文中的链接 我使用: // remove entire anchors $body=preg_replace('/<a[^>]*>(.*)<\/a>/iU','[Link Removed]', $body); // remove links not wrapped in an anchor tag $body= preg_replace('!((?:www|http://)[^ ]+)!', '[L

我经营一个邮寄网站。我设置了正则表达式来替换html电子邮件正文中的链接

我使用:

// remove entire anchors

$body=preg_replace('/<a[^>]*>(.*)<\/a>/iU','[Link Removed]', $body);

// remove links not wrapped in an anchor tag

$body= preg_replace('!((?:www|http://)[^ ]+)!', '[Link Removed]', $body);
//删除整个锚点
$body=preg_replace('/]*>(.*)/iU','[链接已删除]',$body);
//删除未包装在锚定标记中的链接
$body=preg_replace(“!”((?:www | http:/)[^]+)!“,“[链接已删除]”,$body);
我遇到的问题是当html中有一个图像时。当然,img src会被[Link Removed]替换,并在电子邮件中显示一个损坏的图像。我不希望一个链接被替换,如果它是一个图像的src

我怎样才能做到这一点呢?

试试这个:

$body= preg_replace('~(?<!src=["\'])(?:www|http://)[^ ]+~', '[Link Removed]', $body);

$body=preg_replace(“~”(?我希望您注意到与使用正则表达式处理HTML相关的问题?不幸的是,PHP没有简单的替代方法

如果使用反向查找,则可以忽略
src
属性中的URL

此外,
www
选项必须增强为
(?(
www
前面没有斜杠)

这会满足你的要求

$body= preg_replace('_(?<!src=["\'])(?:http://|(?<!/)www)\S+_', '[Link Removed]', $body);

$body=preg\u replace(“”(?优秀的家伙!谢谢!Regex对我来说就像中文,我不太会用中文来学习它!两种方法都适合我的目的;-)我很感谢你的时间!包括@xdazz
<img src=&#34;http:www.mysite.com/image.png&#34;>