【问题标题】:Preg replace all img when src not on example domain当 src 不在示例域上时 Preg 替换所有 img
【发布时间】:2014-12-07 08:58:06
【问题描述】:

我的 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属性函数末尾没有双引号符号不起作用,则不更改为空字符串。

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

问候,

【问题讨论】:

  • 抱歉,不确定,但是:你的意思是当你有 &lt;img src="http://exammple.com/emoticon/example.gif"&gt; 这样的东西时它可以工作,但是当你有 &lt;img src=http://exammple.com/emoticon/example.gif&gt; 时它不起作用?
  • 是的,我不知道问题出在哪里。

标签: php regex image preg-replace


【解决方案1】:

好的,所以问题是你已经明确声明应该在 URL 的末尾有一个 "&gt;(你还明确声明应该有一个开头 @987654323 @ 在src= 之后的 URL 开头,所以如果不在那里,它也不起作用)。

您可以修复此行为,方法是在 "&gt; 之后添加 ? 标记,使其成为可选。

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

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

警告

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

&gt; 不存在有什么原因吗?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-06
    • 1970-01-01
    • 2016-03-09
    • 2017-01-10
    相关资源
    最近更新 更多