如何搜索不在[img]bb标记内的图像URL,然后使用regex&;PHP

如何搜索不在[img]bb标记内的图像URL,然后使用regex&;PHP,php,html,regex,Php,Html,Regex,有很多类似的话题,这一个非常接近@Denomales 但我面对的是略有不同的塞纳里奥 在文本字段中,我将图像括在[IMG][/IMG]标记内,例如 [img]http://i58.tinypic.com/i3yxar.jpg[/img] http://www.jonco48.com/blog/tongue1.jpg 还有一些普通的图像URL,即没有[IMG]标记,例如 [img]http://i58.tinypic.com/i3yxar.jpg[/img] http://www.jonc

有很多类似的话题,这一个非常接近@Denomales

但我面对的是略有不同的塞纳里奥

在文本字段中,我将图像括在[IMG][/IMG]标记内,例如

[img]http://i58.tinypic.com/i3yxar.jpg[/img]
http://www.jonco48.com/blog/tongue1.jpg
还有一些普通的图像URL,即没有[IMG]标记,例如

[img]http://i58.tinypic.com/i3yxar.jpg[/img]
http://www.jonco48.com/blog/tongue1.jpg
我想找到所有普通图像url,并在其中包含[IMG]标记(使用preg_replace或类似功能),以便上述url成为

[img]http://www.jonco48.com/blog/tongue1.jpg[img]
现在真正的挑战是,声明应该跳过那些已经包含在[img]bb标签中的图像URL,那么我该怎么做呢?我对regex的理解很差
谢谢

这可能会帮助您使用替换

((\[img\])?(http:.*?\.(jpg|png|gif))(\[\/img\])?)

注意:如果需要,也可以更改内部部分以验证URL

示例代码:

$re = "/((\\[img\\])?(http:.*?\\.(jpg|png|gif))(\\[\\/img\\])?)/i";
$str = "[img]http://i58.tinypic.com/i3yxar.jpg[/img] http://i58.tinypic.com/i3yxar.jpg";
$subst = '[img]$3[/img]';

$result = preg_replace($re, $subst, $str);
正则表达式:


如果我需要检查其他类型,则正则表达式应该如下所示“/(\[img\])?(http:...\\(jpg | png | gif))(\[\\/img\])?)/i”;对吗???这个语句是什么意思$subst='[img]$3[/img]';$3$3是在索引3处捕获的组,并在该匹配组周围添加[img]标记。在右侧的演示中查看匹配。谢谢,它也起了作用,但您和上面的答案之间的区别是什么?您的外观更复杂