讀古今文學網 > 精通正則表達式(第3版) > 第1章 正則表達式入門 >

第1章 正則表達式入門

Introduction to Regular Expressions

想像一下這幅圖景:你需要檢索某台Web服務器上的頁面中的重複單詞(例如「this this」),進行大規模文本編輯時,這是一項常見的任務。程序必須滿足下面的要求:

●能檢查多個文件,挑出包含重複單詞的行,高亮標記每個重複單詞(使用標準 ANSI的轉義字符序列(escape sequence)),同時必須顯示這行文字來自哪個文件。

●能跨行查找,即使兩個單詞一個在某行末尾而另一個在下一行的開頭,也算重複單詞。

●能進行不區分大小寫的查找,例如『The the…』,重複單詞之間可以出現任意數量的空白字符(空格符、製表符、換行符之類)(譯注1)。

●能查找用HTML tag分隔的重複單詞。HTML tag用於標記互聯網頁上的文本,例如,粗體單詞是這樣表示的:『…it is <B>very</B> very important…』。

這些問題並不容易解決,但又不能不解決。我在寫作本書的手稿時,曾用一個工具來檢查已經寫好的部分,我驚奇地發現,其中竟有那麼多的重複單詞。能夠解決這種問題的編程語言有許多,但是用支持正則表達式的語言來處理會相當簡單。

正則表達式(Regular Expression)是強大、便捷、高效的文本處理工具。正則表達式本身,加上如同一門袖珍編程語言的通用模式表示法(general pattern notation),賦予使用者描述和分析文本的能力。配合上特定工具提供的額外支持,正則表達式能夠添加、刪除、分離、疊加、插入和修整各種類型的文本和數據。

正則表達式的使用難度只相當於文本編輯器的搜索命令,但功能卻與完整的文本處理語言一樣強大。本書將向讀者展示正則表達式提高生產率的諸多辦法。它會教導讀者如何學會用正則表達式來思考(think regular expressions),以便於掌握它們,充分利用它們的強大功能。

如果使用當今流行的程序設計語言,解決重複單詞問題的完整程序可能僅僅只需要幾行代碼。使用一個正則表達式的搜索和替換命令,讀者就可以查找文檔中的重複單詞,並把它們標記為高亮。加上另一個,你可以刪除所有不包含重複單詞的行(只留下需要在結果中出現的行)。最後,利用第三個正則表達式,你可以確保結果中的所有行都以它所在文件的名字開頭。在下一章裡,我們會看到用Perl和Java編寫的程序。

宿主語言(例如Perl、Java以及VB.NET)提供了外圍的處理支持,但是真正的能力來自正則表達式。為了駕馭這種語言,滿足自己的需求,讀者必須知道如何構建正則表達式,才能識別符合要求的文本,同時忽略不需要的文本。然後,就可以把表達式和語言支持的構建方式結合起來,真正處理這些文本(加入合適的高亮標記代碼,刪除文本,修改文本,等等)。