30分鐘學習正則表達式指南

30分鐘學習正則表達式指南
Jim Hollenhorst
(原文:http://www.codeproject.com/dotnet/regextutorial.asp
在30分鐘內學習使用正則表達式

(翻譯別人的文章還真是很有難度呀,看來自己得加強英文水平了)

使用Expresso學習.net正則表達式

你曾經很想知道什麼正則表達式,並且想很快地對它有一個基本的瞭解嗎?我寫這篇文章的目的就是使你在30分鐘內能夠對正則表達式有個很好的瞭解。事實上正則表達式並沒有他們看起來那麼複雜。最好的學習方式就是邊寫邊實踐。經過你的頭半個小時學習,你應該知道一些基本的構造,能夠在你的程序或者網頁中設計和使用正則表達式。除了你已經很喜歡的這些東西,還有很多優秀的資源供你進一步學習。

正則表達式到底是個什麼鬼東西?

確信你一定經常看到“通配符”(wildcard)在正則匹配中的使用。例如,如果你想在Windows目錄彙總查找所有的微軟Word文件,就使用“*.doc”查找,因爲你知道星號(*)是通配符,被認爲可以匹配任何順序字符串。正則表達式就是在具有這樣的功能基礎上進一步的延深。
在熟練編碼或者網頁製作是,很頻繁而且很有必要地去查找匹配複雜模式的字符串。正則表達式就自然用來描述這樣的負責模式。結果,正則表達式僅僅就是一個個模式的簡捷代碼。例如,模式“/w+”就是一個簡練的方式去表達“匹配任何非空字符組成的字符串”。.NET框架提供了很強大的類庫,使得你很容易在你的應用中使用正則表達式。使用這個類庫,你可以很容易查找和替換文本、破譯複雜的報頭、解析語言或者驗證文本。
一種很好的學習這種不可思議正則表達式語法的方式就是:從實例開始,然後開始你自己的創造。本指南僅僅介紹正則表達式的基礎,在Expresso類庫中給出了很多的實例。Expresso可以用來驗證實例以及你自己實踐的正則表達式。
讓我們開始吧。

一些簡單的實例
查找Elivs
假設你花掉所有的空閒時間在文檔中來尋找Elvis認然活着的證據。你可以使用以下的正則表達式:

1. elvis 查找elvis

這個正則表達式完全有效的查找一致順序的字符。在.NET中,你可以很輕鬆的設定忽略字母大小寫,一次這個表達式也可能匹配“Elvis”、“ELVIS”或者“eLvIs”。不幸的是,它也將匹配後五個字符爲“pelvis”的字符串。我們可以如下改進表達式:

2 /belvis/b 把elvis作爲一個整體查找

現在事情變得更有趣了。“/b”是一個特殊意義的編碼:在開始或者結尾匹配詞語。這個表達式僅僅匹配完整的詞語“elvis”,當然忽略了字母的大小寫。
假如你在所有的行中查找後面跟着“alive”的詞語“elvis”。句號“.”就是一個可以匹配除換行符之外的特殊編碼。星號“*”表示可以無限次重複匹配先前的查詢條件。這樣的話,“.*”意味着“匹配除換行符外的任何字符”。所以,在同一行中查找elvis後面跟着alive的正則表達式就很容易寫出來了。

3 /belvis/b.*/balive/b 可以查找後面跟着 "alive"的"elvis"

使用僅僅幾個特殊的字符,我們就可以開始建立強大的正則表達式,而這些表達式我們曾經認爲很困難去閱讀。
讓我們再試試另外一個例子。

判斷電話號碼的有效性

假設你的網頁收集客戶的7位數字的電話號碼,你想驗證這些電話號碼數字是否格式正確,"×××-××××",每一個“×”都是一個數字。下面這個表達式可以很好查找這樣的字符串:

4 /b/d/d/d-/d/d/d/d 查找7位數字的電話號碼

每一個“/d”表示“匹配任意一個單一數字”。“-”沒有任何特殊的含義,僅僅是其本來的字面含義,匹配一個連接符。爲避免煩人的重複,我們可以使用代表同樣意義的快捷符號:

5/b/d{3}-/d{4} 能夠更好的查找7位數字的電話號碼

緊跟“/d”的“{3}”表示“重複前面的字符3次”。讓我們開始學習怎麼樣去測試這個表達式。

Expresso

如果你並沒有發現正則表達式很難閱讀,你很有可能是個白癡專家或者來至另外一個星球。任何人對這些符號都印象深刻,包括那些頻繁使用和測試表達式的人。有很多的測試工具存在,但是我更偏向我自己的工具:Expresso,來源於CodeProject,以下演示的是2.0版本。如果你想得到較新的版本,你可以去http://www.ultrapico.com/上查找。
從得到、安裝Expresso以及從Windows程序菜單選擇指南,可以通過使用“Expression Library”標籤來選擇使用每一個實例。

圖1 Expresso 運行實例5

通過選擇第一個實例,“1.Find Elvis”。通過點擊Run Match然後查看右邊的樹。注意那裏有好幾處匹配。點擊每一處可以看到在實例中匹配的每一個位置。運行第二個、第三個實例,注意到“pelvis”沒有相關的匹配項。最終,運行第四個以及第五個實例;都應該在文本中看到同樣的數目。試着去掉開始的“/b”,你會發現郵政編碼也匹配電話號碼的格式。

.NET正則表達式基礎

讓我們開始學習.NET中的正則表達式吧。

特殊字符

目前,你應該大概瞭解一些具有特殊含義的字符了吧。你已經遇到:“/b”、“.”、“*”以及“/d”。如果想匹配任何空白的字符,比如空格、製表符(tabs)以及換行,你可以使用“/s”。同樣的,“/w”匹配任何文字或者數字字符。
讓我們開始一些其他的實例:

6 /ba/w*/b查找以字母a開始的詞組

這個以查找詞組的起始位置(/b),然後是字母“b”,然後是任何重複的文字或者數字字符(/w*),然後是詞組的結尾(/b)。

<未完>

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章