现在我正在使用
$content = preg_replace('@(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+)?)@', '<a href="$1" target="_blank">Download</a>', $content);
用于下载链接替换下载。
和
$content = preg_replace('@(https?://([-\w\.]+)+(:\d+)?((/[\w/_\.%\-+~]*)?(\?\S+)?)?)@', '<a href="$1" target="_blank">$1</a>', $content);
用于正常的url链接替换,它不支持#和许多其他特殊符号。
但是,我想在同一文本上同时使用这个声明。
所以,我想要一个常见的正则表达式或者我可以应用的方法,通过该方法,url链接和下载链接重新放置器可以在同一文本上工作,如果出现任何下载链接,则将其替换为Download或者如果有任何url链接替换为url链接。
e.g。更换 http://www.abc.com/song1.mp3
与
<a href="http://www.abc.com/song1.mp3" target="_blank">Download</a>
<a href="http://www.exp.com/#p3+x2" target="_blank">http://www.exp.com/#p3+x2</a>
<a href="http://www.youtube.com/" target="_blank">http://www.youtube.com/</a>
答案 0 :(得分:0)
$urls = array(
'http://www.abc.com/xxx/song1.mp3',
'http://www.exp.com/yyy/#p3+x2',
'http://www.youtube.com/zzz/'
);
foreach($urls as $url) {
$parts = parse_url($url);
if (preg_match('~/$~', $parts['path'])) {
echo "<a href='$url' target='_blank'>$url</a>\n";
} else {
echo "<a href='$url' target='_blank'>Download</a>\n";
}
}
<强>输出:强>
<a href='http://www.abc.com/xxx/song1.mp3' target='_blank'>Download</a>
<a href='http://www.exp.com/yyy/#p3+x2' target='_blank'>http://www.exp.com/yyy/#p3+x2</a>
<a href='http://www.youtube.com/zzz/' target='_blank'>http://www.youtube.com/zzz/</a>