相信很多人在處理資料驗證時都會遇到這樣的問題,「光要驗證一個E-mail就要寫上一整頁的程式碼,而且還只有寫的人看得懂 Orz」;相信更多會有這樣的疑問,「為什麼這個網站只要一行奇怪的code就可以驗證E-mail了?」、「為什麼他們驗證E-mail的速度會這麼快?」;一切都是因為這個東西,正規表示式(Regular Expression,簡稱RegEx或RE)。
關於RE的起源、演化你可以自行參閱維基百科的這則條目
目前有支援RE的程式語言非常的多,包括JavaScript、VBScript、JAVA、.NET、PHP、Perl、Phython、Ruby甚至C語言等等應有盡有,讓程式設計師在文字處理上(字串搜尋、比對、取代)都能夠保持簡潔、有效率的程式碼。
RE的範例倉庫: http://regexlib.com/ ,這個網站收集了世界各地網友所寫出的RE範本,對於一些RE不夠熟或者是沒有時間自己撰寫RE的朋友能夠提供相當大的幫助。不過,一般來說,RE的 pattern不會是通用的,也就是說其它人所寫出的RE不見得自己就能夠百分之百適用。因此,如果自己至少擁有能夠看懂RE並且小幅修改的能力,這樣一來在取用他人的心血與經驗時,更能夠調整出適合自己使用的RE。
除了將RE應用在程式上之外,進行文字資料的整理也能夠將RE的威力發揮到最大,透過RE進行處理以後再重新輸出 標準格式的文字資料,對於需要處理大量資料的專業人士幫助非常的大(例如生統的DNA資料);筆者前陣子利用Perl在處理html檔案原始碼,為了要將原始碼中的URL找出並且替換成比較顯眼的格式,在一開始用了大約20行的Perl code處理,效能上也不是那麼好。後來靈機一動改用RE之後,僅僅使用了一行就解決了問題:
$line =~ s/(.*?)<\\/a>/$4 [$2]/gsi;
「=~」 右邊是我的RE code,功用是將 URL NAME 替換為URL NAME[URL]
感受到威力了嗎?心動了嗎?快來試試吧!