網站首頁 工作範例 辦公範例 個人範例 黨團範例 簡歷範例 學生範例 其他範例 專題範例

《Mastering Regular Expressions》讀書筆記

欄目: 讀書筆記 / 釋出於: / 人氣:1.18W

近段涉及到了資料的解析,自然離不開對regular expressions(正則表示式)的溫習;在jdk官方原始碼中看到了對《mastering regular expressions, 2nd edition》的推薦;由jeffrey e.f. friedl大師主刀,o'reilly於XX年再版。對o'reilly的書向有好感,像當年誤入java的歧途,沒看java程式設計思想之類的,倒看了o'reilly的一本影印版《java in a nutshell》,頗留記憶。

《Mastering Regular Expressions》讀書筆記

正則表示式的“祖先”可以一直上溯至對人類神經系統如何工作的早期研究。warren mcculloch 和 walter pitts 這兩位神經生理學家研究出一種數學方式來描述這些神經網路。1956 年, 一位叫 stephen kleene 的數學家在 mcculloch 和 pitts 早期工作的基礎上,發表了一篇標題為“神經網事件的表示法”的論文,引入了正則表示式的概念。正則表示式就是用來描述他稱為“正則集的代數”的表示式,因此採用“正則表示式”這個術語。

隨後,發現可以將這一工作應用於使用 ken thompson 的計算搜尋演算法的一些早期研究,ken thompson 是 unix 的主要發明人。正則表示式的第一個實用應用程式就是 unix 中的 qed 編輯器。

目前,正則表示式已經在很多軟體中得到廣泛的應用,包括*nix(linux, unix等),hp等作業系統;php,perl,python,c#,java等開發環境,以及很多的應用軟體中,for example:網路上的搜尋引擎,資料庫的全文檢索etc...

本筆記是是自我學習過程的一個整理,例子或來源於書本,或自己列舉。好了,廢話一籮筐,切入正題。

1、正則表示式的介紹

1.1、行開始和結束

^begin line。匹配行開頭,如^cat匹配以cat開頭的

$end line。匹配行結束,如cat$匹配以cat結束的;^cat$僅僅匹配該行有cat

1.2、匹配給定的字元序列

[...],表示in。裡面寫入欲匹配的幾個字元,如,匹配seperate,separete,separate";匹配, ,

, etc.[a-z]代表從a到z中的任意字元,[0-9]、[a-z]分別代表0-9,a-z中的任意數字或大寫字母;“-”代表連續的從開始字元到結束;那麼[0123456789abcdefabcdef]也可以寫為[0-9a-fa-f];對於這些頻繁使用的字元,各語言分別做了相同的預定義:

1.3、匹配非給定的字元(非...)

[^]匹配,表示not。^和行開頭的標記完全一樣,但寫的位置不一樣,則表述的意思可能完全相反,用^表示否定的意思,更多是寫在[]裡面,如:q[^u]匹配q後面緊跟非u的字元,如iraqi,qasida,zaqqum,iraq;沒錯,"iraq"這個單詞也會被匹配,儘管q後面什麼也沒有,也可能有個空格、或回車符等。否定字元的意思(翻譯出來繞口):means "match a character that's not listed" and not "don't match what is listed."

1.4、匹配任何字元

.匹配,表示any。任何字元,如07.04匹配:07_04,07-04,07 04,07.04 etc;如想要精確匹配07/04,07-04,or 07.04;需要寫07[-./]04;沒錯當.在[]裡面包含的時候,僅僅表示“.”字元而已,如果不在[]裡面,需要轉義. 如匹配形如x.y的小數:是[0-9].[0-9],而非[0-9].[0-9]

1.5、匹配幾個給定的字元序列中的一個

|匹配,表示or。to be continued....