如何搜索不在[img] bb标签内的图片网址,然后使用正则表达式& amp; PHP

时间:2014-07-18 12:53:31

标签: php html regex

@Denomales有很多类似的话题 How to search urls that are not in any html tag and then turn them into hyperlinks?

但是我面临着稍微不同的情绪

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

[img]http://i58.tinypic.com/i3yxar.jpg[/img]

并且有简单的图像网址,即没有[IMG]标记,例如

http://www.jonco48.com/blog/tongue1.jpg

我想找到所有普通图片网址并在其中加入[IMG]标签(使用preg_replace或类似的功能),以便上面的网址变为

[img]http://www.jonco48.com/blog/tongue1.jpg[img]

现在真正的挑战是语句应该跳过那些已经包含在[img] bb标签中的图像URL,那么我怎么能这样做我的正则表达式理解很差 感谢

2 个答案:

答案 0 :(得分:1)

正则表达式:

(?<!\[img\])(https?:\/\/(?:www\.)?[\w.]+\.[a-z]{2,6}(?:\/\w+)*(?:\.\w+)?)(?!\[\/img\])

的更换:

[img]\1[/img]

DEMO

答案 1 :(得分:0)

这可能会帮助您使用替代。

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

DEMO

注意:如果需要,也可以更改内部部分以验证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);