用于下载和URL链接的常见Preg_replace

时间:2011-12-08 05:57:50

标签: php regex preg-replace

现在我正在使用

$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

http://www.exp.com/#p3+x2

http://www.youtube.com/

<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>

1 个答案:

答案 0 :(得分:0)

查看parse_url

$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>