我在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
请注意,我还在模式开头的第一个"
之后添加了一个?
。
警告
这样做会带来自己的问题,例如:[^>]
将匹配任何不是>
字符,因此可能会匹配到字符串的末尾,因此您可能会丢失输出中的所有其余字符串(取决于您的替换等)...
>
吗?