PHP 正規化的好幫手:preg_replace()

某些字串取代不能夠單純的用 str_replace 達成
這時候就要搭配正規化Regular Expression, 簡寫 Regex)來做到

PHP 中可以用 preg_replace 來做到正規化取代的功能
preg_replace ( mixed $pattern , mixed $replacement , mixed $subject [, int $limit [, int &$count ]] )

在大量線上 Post 文或文書處理時
編輯人員往往都不會自行將來源的文字中的網址加上超連結
這時讀者如果想要到文中提及的網站瀏覽
就只能乖乖的複製好網址再貼上到瀏覽器的網址列了

如果想要將文章裡面的文字連結利用正規化變成真的 Hyper Link
請試看看以下的範例:

<?php

// 將字串中的網址加入超連結
function parseURL($strURL = null)
{
$regex = "{ ((https?|telnet|gopher|file|wais|ftp):[\\w/\\#~:.?+=&%@!\\-]+?)(?=[.:?\\-]*(?:[^\\w/\\#~:.?+=&%@!\\-]|$)) }x";

return preg_replace(
$regex,
"<a href=\"$1\" target=\"_blank\" alt=\"$1\" title=\"$1\">$1</a>",
$strURL);
}

echo ParseMsg('http://www.php.net');

?>

得到的結果:

http://www.php.net


延伸閱讀:
PHP 編寫 BBCode 函式

Comments

said…
謝謝您的範例函式,這實在幫了我很大的忙!這功能原本打算自己寫,但寫了很久,還是有很多缺點。無意中,找到您的文章,因此解決了我的難題。
有個不太懂的地方想請教您:
href=\"$1\",
$1是怎麼來的呢?表達式的結果是如何存成$1變數?
非常感謝!
Goodspeed said…
您好,

$1 是從 $regex 來的
利用正規化的條件
將參數 $strURL 跟 $regex 比對
有符合規則的話就套入條件
所以 $strURL 可以不必僅是 http://www.php.net
也可以是字串中含有超連結的文字
此 function 將會自動取代

可參考 http://tw2.php.net/manual/en/function.preg-replace.php

謝謝瀏覽~
KINK@BLOGGER said…
你好~
請問[\\w]這怎麼解讀呢?
我還看過[\@]這些從基本說明中都沒有這樣的用法阿?

Popular posts from this blog

CentOS7 如何新增/移除 Rich Rule for firewalld

mac 安裝 mtr

如何設定 SSL VPN 分割通道 on Fortigate 80C