我一直在尝试使用正则表达式验证图片网址,如下所示:
#\[img\](((http:\/\/|https:\/\/)?(www.)?(([a-zA-Z0-9-]){2,}\.){1,4}([a-zA-Z]){2,6}(\/([a-zA-Z-_\/\.0-9#:?=&;,]*)?)?))\[\/img\]#iUs
我希望能够取代:
[img]http://www.website/folders/url_here.png[/img]
[img]https://www.website/folders/url_here.jpg[/img]
[img]https://www.website/folders/url_here.gif[/img]
使用:
<img src="http(s):www.website/folders/url_here.png(jpg, gif)" />
使用:
$new_string = preg_replace($search, $replace, $string);
谢谢!
答案 0 :(得分:1)
这样的事情:
<?php
$rgx = '/\[img\](https?:\/\/.+?\.(?:png|gif|jpg))\[\/img\]/';
$arr = array(
'sdvsvsdvsdv[img]http://www.website/folders/url_here.png[/img]sdvsdvsvdsvdsdv',
'sdvsvdsvd[img]https://www.website/folders/url_here.jpg[/img]svsnvlkn',
'sdvsdvsdv[img]https://www.website/folders/url_here.gif[/img]svdsvd'
);
$all = 'sdvsvsdvsdv[img]http://www.website/folders/url_here.png[/img]sdvsdvsvdsvdsdv
sdvsvdsvd[img]https://www.website/folders/url_here.jpg[/img]svsnvlknsdvsdvsdv[img]https://www.website/folders/url_here.gif[/img]svdsvd';
echo "Individual strings:\n";
foreach ($arr as $str) {
echo preg_replace($rgx, '<img src="$1" alt="">', $str) . "\n";
}
echo "\nAll together: \n";
echo preg_replace($rgx, '<img src="$1" alt="">', $all) . "\n";
键盘: http://codepad.org/n00B6akn
一些小调整:
或者这个调整加快了我制作的正则表达式,保持它贪婪而不是让中间非贪婪:
$rgx = '/\[img\](https?:\/\/[^\[]*\.(?:png|gif|jpg))\[\/img\]/'
这里没有太多的斜线:
$rgx = '~\[img\](https?://[^\[]*\.(?:png|gif|jpg))\[/img\]~'
确保img标签匹配,并且它们之间的任何内容都以http(s)://开头,并以.png / .gif / .jpg结尾。如果你需要更好的验证,那么像hwnd最初做的那样(他的回答的第一部分)更合适(假设你根据自己的需要调整他的解决方案)。
答案 1 :(得分:1)
您可以使用以下内容。
$text = <<<DATA
[img]http://www.website/folders/url_here.png[/img]
[img]https://www.website/folders/url_here.jpg[/img]
[img]https://www.website/folders/url_here.gif[/img]
DATA;
$text = preg_replace('~\[(img)\](https?://\S+\.(?:png|gif|jpg))\[/\1\]~',
'<img src="$2" />', $text);
输出
<img src="http://www.website/folders/url_here.png" />
<img src="https://www.website/folders/url_here.jpg" />
<img src="https://www.website/folders/url_here.gif" />
请参阅Live demo
答案 2 :(得分:0)
你会想要使用类似的东西:
$output = preg_replace('/\[img\]((?:https|http|ftp):\/\/.+?\.(?:png|gif|jpg))\[\/img\]/igm', '<img src="$1" alt="Image">', $input);
$input
是您的文字页面,$output
是您的结果。正则表达式评估url和bbcode,然后将其添加到标记。我添加了alt =“”属性只是为了让它更有效。我也允许使用ftp协议,因为一些ftp服务器允许公共访问图像文件。
/igm
使其不区分大小写,允许后续搜索从上一个匹配结束开始,并匹配行的开头和结尾,而不是整个字符串的开头和结尾。