2014年3月17日 星期一

Java 的正規表示法

要用 Java 來進行資料剖析 (Parsing) 一定要用到正規表示法. 我原先用 Javascript 與 PHP 所寫的剖析函式庫要轉換到 Java 還得費一些功夫, 這些語言所實作的 RegExp 不僅在用法上有很大的差異, 就算是正規運算式本身也不盡相同.

資料剖析並不難, 主要是字串的處理而已. 出於效能的考量, 原則是盡量使用語言本身的字串函式庫達成剖析目的, 不要什麼都用正規表達式, 除非實作起來很繁雜, 而 RegExp 卻一行就打死. 我做剖析時要用到的最主要函式有兩個, 一個是剖析出兩個界定字串之間的子字串, 另外一個是若有重複性, 把這些子字串以陣列傳回俾後續處理.

前陣子在市圖借的這本 Oreilly "精通正規表達式 (第三版, Jeffrey E.F.Friedl 原著)" 寫得極好, 含括了 PHP, Perl, Python, Java, Ruby 等語言, 今天翻了一下, 果真是即戰力書籍, 馬上就找到今日難題的解方, 要好好研究. 關於剖析技術還有一本好書, 同樣是歐萊禮的 "Getting Started with Pyparsing", 這是用超強的 Python 寫的, 可以參考一下如何移植到 Java 來, 畢竟 Java 在文字處理上比較弱.

使用正規表示法也不是一天兩天的事了, 但學過的人都知道, 學這玩意兒比學任何程式語言還慘, 久沒用不是忘得差不多了, 而是忘光光. 其語法精簡到不能再簡, 如果覺得自己懂了, 那就是還不懂; 如果覺得好難懂, 那就差不多快懂了.

以下是 Parsing 函式庫改寫過程中所參考的一些網上資料 :
  1. 正規表示式的入門與應用(一) (作者首頁 恆逸)
  2. Java正規表示式 忽略大小寫用法  
  3. Create array of regex matches  
  4. Convert ArrayList containing Strings to an array of Strings in Java? 
  5. Regular Expression 在 replace 的應用 
  6. Java 快速導覽 - String 類別的 replaceAll()  

沒有留言 :