php - Preg_replace 为 url 和下载链接

标签 php regex url preg-replace

现在我正在使用

$content = preg_replace('@(https?://([-\w\.]+)+(:\d+)?(/([\w/_\.%-]*(\?\S+)?)?)?)@', '<a href="$1" target="_blank">$1</a>', $content);

用于用链接替换 ​​url 文本。但是,它不适用于 url 中的 + 和 ~ 符号。谁能弄清楚这里必须做什么。

还有 我想要下载链接的修改版本,将 url 文本替换为“下载”。

$content = preg_replace('@(https?://([-\w\.]+)+(:\d+)?(/([\w/_\.%-]*(\?\S+)?)?)?)@', '<a href="$1" target="_blank">Download</a>', $content);

对于

 $fields=array('.exe','.mp3','.pdf','.rar','.doc','.jar','.ppt','.xls','.png','.jpg','.jpeg','.gif','.mp4','.avi','.mkv','.flv','.3gp','.mms','.sis','.sisx','.jad','.mdi','.qcp');

扩展。

例如, http://www.abc.com/song1.mp3

<a href="http://www.abc.com/song1.mp3" target="_blank">Download</a>

http://www.abc.com?id=1&query=preg+replace

 <a href="http://www.abc.com?id=1&query=preg+replace" target="_blank">http://www.abc.com?id=1&query=preg+replace</a>

最佳答案

尝试使用 + 和 ~ 链接:

@(https?://([-\w\.]+)+(:\d+)?((/[\w/_\.%\-+~]*)?(\?\S+)?)?)@

这个供您下载:

@(https?://([-\w\.]+)+(:\d+)?/[\w/_\.%\-+~]+(\.exe|\.mp3|\.pdf|\.rar|\.doc|\.jar|\.ppt|\.xls|\.png|\.jpg|\.jpeg|\.gif|\.mp4|\.avi|\.mkv|\.flv|\.3gp|\.mms|\.sis|\.sisx|\.jad|\.mdi|\.qcp)(\?\S+)?)@

在这里您可以测试它们:
http://regexr.com?2vdij
http://regexr.com?2vdia

编辑:

现在我发现您的链接问题 http://www.abc.com?id=1&query=preg+replace - 您的第一个正则表达式中存在括号缺陷。我已经纠正了我的第一个示例!

关于php - Preg_replace 为 url 和下载链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8414675/

相关文章:

php - 希腊语作为 json 与 php 的问号

PHP readfile 与 file_get_contents

php - 如何修改表中所有行的属性?

c# - RegEx.Replace 但排除 html 标签内的匹配项?

regex - 具有正向回顾的复杂 (PHP) 正则表达式

c# - 另一个 URL 前缀正则表达式问题(用于 C#)

url - UUID 和搜索引擎友好的 URL

javascript - Codeigniter 分页 URI 上的 ESCAPE PAGE NUMBER

javascript - 正则表达式对某些字符给出错误

url - Struts2-URL标签-隐藏查询字符串