Php 正则表达式将普通图像url转换为img标记

Php 正则表达式将普通图像url转换为img标记,php,regex,image,preg-replace,preg-match,Php,Regex,Image,Preg Replace,Preg Match,我知道还有其他话题,但大多数都有不同的问题。 我试图在纯文本中匹配图像URL并将其转换为标记,但正则表达式不能正常工作 /(http | https):\/\/(\S*)\(jpg | gif | png)(\?(\S*))?/i 以上内容应与具有url字符串的图像匹配: http://www.example.com/landscape.jpg?w=120 并且没有查询字符串: http://www.example.com/landscape.jpg 但是它不应该与这个匹配,注意末尾的X: ht

我知道还有其他话题,但大多数都有不同的问题。 我试图在纯文本中匹配图像URL并将其转换为标记,但正则表达式不能正常工作

/(http | https):\/\/(\S*)\(jpg | gif | png)(\?(\S*))?/i

以上内容应与具有url字符串的图像匹配:

http://www.example.com/landscape.jpg?w=120

并且没有查询字符串:

http://www.example.com/landscape.jpg

但是它不应该与这个匹配,注意末尾的X

http://www.example.com/landscape.jpgx

这不是图像的url,而我当前的正则表达式与之匹配,我如何调整正则表达式使其与上一个url格式不匹配?

尝试以下操作:

'/^https?\:\/\/\S+\.(jpg|gif|png)(\?\S+\=\S+)?$/i'
您可以在url后面的末尾添加一个检查下一个字符(此处为空白字符、字符串结尾或标点字符)的字符:

试试这个

$string = 'This is image inside text string http://localhost/test/something.jpg?xml=10, http://google.com/logo.png'; 
function _callback($matches){
return '<img src="'.$matches[0].'" />'
}

echo preg_replace_callback('/https?:\/\/(.*?)\.(jpg|png|gif)(\?\w+=\w+)?/i', '_callback', $string);
$string='这是文本字符串中的图像http://localhost/test/something.jpg?xml=10, http://google.com/logo.png'; 
函数_回调($matches){
返回“”
}
echo preg\u replace\u callback('/https?:\/\/(.*?)\(jpg | png | gif)(\?\w+=\w+?/i','u callback',$string);

您可能需要为图像添加
jpeg
和其他可识别的文件扩展名。谢谢,但规则似乎不起作用,查询字符串应该是可选的,我认为在您的规则中是
必需的
(\?\S+\=\S+)
应该是可选的。呵呵,看起来像一个很棒的正则表达式。。。不过,一点解释就能改善你的答案。不要忘记总noob是在堆栈溢出上的,您可能想了解如何将其组合在一起,以及如何解决问题。。。对你来说很明显的东西对他们来说可能不明显。一般来说,增加一点关于你改变了什么以及为什么这解决了原始海报的问题的信息是一种很好的形式。否则,您将进入“低质量帖子”审核队列;)似乎有效,谢谢,这是我最后的PHP代码,我需要在我的情况下强制使用http:
$text=preg\u replace('/(http | https):\/\/(\S*)\(jpg | gif | png)(\?(\S*)?(?=\S |$\pP)/I','',$text,1)
$string = 'This is image inside text string http://localhost/test/something.jpg?xml=10, http://google.com/logo.png'; 
function _callback($matches){
return '<img src="'.$matches[0].'" />'
}

echo preg_replace_callback('/https?:\/\/(.*?)\.(jpg|png|gif)(\?\w+=\w+)?/i', '_callback', $string);