Preg 替换所有 img 当 src 不在示例域上时


Preg replace all img when src not on example domain

我在preg_replace有问题,我的函数有一些错误,我不知道在哪里。我需要从数组中删除除我的主域以外的所有图像。

这是我的函数:

$aPatterns = array (
(...),
'#<img[^>]+src="(?!http://example.com/emoticon/(example|emot|name).gif)[^'s]+"[^>]+>#is',
(...));
$aReplecements = array(
(...),
'',
(...)
);
$contentOut = preg_replace($aPatterns,$aReplecements,$content);

如果 img 标签未关闭或在 src 属性函数的末尾没有双引号,则不会更改为空字符串。

我不知道这种表达有什么问题,我希望,我指望你的帮助。

问候

好的

,所以问题是你已经明确指出在URL的末尾应该有一个">(你也明确指出在src=之后的URL开头应该有一个开始"所以如果不存在,它也不起作用)。

您可以通过在">后添加?标记来修复此行为。

#<img[^>]+src="?(?!http://example.com/emoticon/(example|emot|name).gif)[^'s]+"?[^>]+>?#is

请注意,我还在模式开头的第一个"之后添加了一个?

警告

这样做会带来自己的问题,例如:[^>]将匹配任何不是>字符,因此可能会匹配到字符串的末尾,因此您可能会丢失输出中的所有其余字符串(取决于您的替换等)...

有什么理由不出现

>吗?