2008年4月25日 星期五

PHP preg_replace() 和 Javascript replace()

寫了那麼多工具,在每個階段其實我都運用了不同的技術在實現每個小工具的功能,在這篇文章,我想跟大家分享一下我的歷程,自己認為的確在技巧上有明顯的進步。

寫PHP或Perl的人,應該大家都知道什麼是正規表示式(Regular Expression),用起來可以十分簡單,也可以非常的複雜,完成取決於用的人理解與運用的程式到哪個階段,一般較簡單的用來判斷email格式、電話格式、身份證字號格式等等,這次我要跟大家分享的話,如何運用到類似博客來所提供的AP連結。

有用我的工具應該都了解,我需要大家輸入屬於你自己的策略聯盟帳號,當你輸入後,我是如何去解析與實現轉換的呢?

這邊先以 JavaScript 來說明

首先大家可以參考無敵貼紙的 source code。

我的做法是先取得所有Tag為A的物件
var obj=document.getElementsByTagName('a')
接下來針對每個A物件實現正挸表示的取代,取代分2個步驟
第1個步驟,先將所有已包含AP的連結回復原始連結
obj[i].href=obj[i].href.replace(/\/exep\/assp.php\/(\w+)/i,'')
第2個步驟,置換為自己的AP連結
obj[i].href=obj[i].href.replace(/books.com.tw/i,'books.com.tw/exep/assp.php/'+books_ap_client

再來跟大家說一下PHP又該如何實作
PHP本身其實有好幾種函式都提供正規表示式,我所使用的是preg_replace(),為什麼呢?
第1個原因,PHP官方網站明確說明,此函式的速度比起ereg系列的函式要快速
第2個原因,一開始我使用eregi_replace()的函式,但它似乎無法達到全文替換的功能,只能替換第1次出現符合修件的連結。
接下來就是實際的語法
第1個步驟,先將所有已包含AP的連結回復原始連結
$body = preg_replace('/(\w+)\/exec\/assp.php\/(\w+)/i', '\1', $body);
第2個步驟,置換為自己的AP連結
$body = preg_replace('/href="([a-zA-Z+:\/\/]+).books.com.tw/', 'href="\1.books.com.tw/exec/assp.php/'.$apid.'\2', $body);

雖然JavaScript與PHP實際的用法不太相同,但本意是差不多的,用起來都蠻方便的。

在這邊也推薦大家多用這種語法,可減少程式的複雜度。

沒有留言: