很多人對正則表達式的印象都是用來做表單驗證的,這其實是不大準確的。正則表達式目前在很多軟體中都得到了廣泛的應用,包括Linux,Unix等操作系統,VBScript,Java,PHP等開發環境中,以及很多應用軟體都能應用到正則表達式。 ...
很多人對正則表達式的印象都是用來做表單驗證的,這其實是不大準確的。正則表達式目前在很多軟體中都得到了廣泛的應用,包括Linux,Unix等操作系統,VBScript,Java,PHP等開發環境中,以及很多應用軟體都能應用到正則表達式。
一,正則的歷史。
首先先來掃清一個誤區,老是有人認為正則表達式是JS自己發明的,這當然是不正確的。1956年,一位名叫Stephen Kleene的數學家在McCulloch和pitts早期工作的基礎上,發表了一篇標題為“神經網的表示法”的論文,第一次引入了正則表達式的概念。所謂的正則表達式就是用來描述被他稱為“正則集的代數”的表達式,因此採用了“正則表達式”這個術語。
隨後,人們發現可以將這一工作應用於使用ken Thompson的計算搜索演算法的一些早期研究,Ken Thompson是Unix的主要發明人,第一個將正則表達式使用在應用程式上的就是Unix中的qed編輯器。從那時起直至現在正則表達式都是基於文本的編輯器和搜索工具中的一個重要部分。
正則表達式的發展歷史並不是特別的長遠,但是推出之後卻迅速被各大編程語言所吸收採納。這主要得益於它自己的特點:
第一,相較於傳統的驗證方式,正則表達式可以更高效的完成需要做的驗證工作。
第二,捕獲字元串的能力,正則也可以很好的完成工作,比如截取url的功能變數名稱或者其他的內容等等。
第三,表達靈活和寫法簡潔。從表單中複雜的各種驗證,到對字元串的各種處理,都可以用正則表達式輕鬆實現。
二.正則表達式的定義
正則表達式描述了一種字元串匹配的模式,可以用來檢索一個字元串中是否含有某種子字元串,將匹配的子字元串做替換或者從某個串中取出符合某個條件的子字元串等。
正則表達式是由普通字元(a-z)以及特殊字元(也叫元字元)組成的文字模式。正則表達式作為一個模板,將某個字元模式與所搜索的字元串進行匹配。
2.1普通字元
由所有那些未顯示指定為元字元的列印和非列印字元組成。這就包括了所有的大寫和小寫字元字元,所有數字,所有的標點符號以及一些符號。
2.2特殊字元
特殊字元,指有特殊含義的字元,如“*.exe”中的*.簡單的說就是表示任何字元串的意思,如果要查找文件名中有*的文件,則需要對*進行轉義,即在其前面加一個\.ls \.exe。
正則表達式里的特殊字元$,( ),*,+,...[,?,\,^,|
$匹配輸入的字元串的結尾位置。
()標記一個子表達式的開始和結束位置。
*匹配前面的子表達式零次或多次。
+匹配前面的子表達式一次或多次。
.匹配除換行符\n之外的任何單字元。
[標記一個中括弧表示式的開始。
?匹配前面的子表達式零次或一次。
{標記限定表達式的開始。
\將下個字元標記為特殊字元,或原意字元,或向後引用,或八進位轉義符。
^匹配輸入字元串的開始位置,除非在方括弧表達式中使用,此時它表示不接受該字元集合。
|指明兩項之間的一個選擇。
2.3限定符
限定符用來指定正則表達式的一個給定組件必須要出現多少次才能滿足匹配。有*,+,?,{n},{n,},{n,m}共6種。
*匹配前面的子表達式零次或多次.
+匹配前面的自表達式一次或多次,?匹配前面的子表達式零次或一次。
{n} n是一個非負整數,匹配確定的n次。
{n,}n是一個非負整數,至少匹配n次。
{n,m}m和n均為非負整數,且n<=m,最少匹配n次且最多匹配m次。
2.4定位符
用來描述字元串或單詞的邊界,^和$分別指字元串的開始和結束,\b描述單吃的前或後邊界,\B表示非單詞邊界,不能對定位符使用限定符。
三.正則表達式在web中的應用
正則表達式在web系統中的應用廣泛,可以進行數據格式檢測,替換相關文本,提取感興趣的文本內容等。
例如:驗證字元串中E-mail地址的合法性
郵件地址格式是<用戶名@功能變數名稱>,對於用戶名,除了數字和字母外,有的允許有“-”,有的允許有“.”,也有的兩者都可,或者允許其他的特殊字元。對此我們只能根據具體情況判斷。文字中假設除字母和數字外還允許“.”“-”並且“.”“-”不嗯給你出現在首末位。“,”“。”“-”不能相連。功能變數名稱中各段除數字和字母外只允許出現”-”且不能不出現在首位和末位,各段用“.”連接,我們可以從功能變數名稱得知最後一段大於一位且只有字母,根據以上內容我們可以寫出表達式倆判斷該串是否是合法的郵件地址。
是不是感覺很麻煩,光聽規則就感到頭疼?別急,分部解釋如下:
^:匹配開始
([a-z0-9A-Z]+[-|\.]?)+:數字或字母大於一位,“-”或”.“以上組合重覆1次以上。
[a-z0-9A-Z]:用戶名以數字或字母結尾。
@:匹配“@”[a-z0-9A-Z]+匹配多位數字或字母
(-[a-z0-9A-Z]+)?:匹配一加多位數字或字母0次或1次。
\.:匹配”.”
+:匹配括弧內的內容多次
[a-zA-Z]{2,}匹配字母2次以上
$:匹配結尾把上面的各項組合一起,就可以匹配一個比較全面的郵件地址,正則表示式如下:
^([a-z0-9A-Z]+[-|\.]?)+[a-z0-9A-Z]@([a-z0-9A-Z]+(-[a-z0-9A-Z]+)?\.)+[a-zA-Z]{2,}$
複雜麽?整個來看確實還蠻複雜的,但當你把功能分開,先逐個實現,再組合在一起,其實也沒那麼複雜吧。
全棧工程師需要懂正則來做各種表單驗證,字元串處理,架構師也要懂正則表達式,因為框架中都會用到正則表達式。那麼,根據前文提到的,正則表達式理所當然是我們必須學會的語言之一。HTML5的正則表達式項目開發課程有啥特點呢?最大的特點就是突出實用和高效。在精通前端的基礎上學習正則表達式,能夠更好的站在更高的層次去思考和學習正則表達式。
正則表達式項目開發課程如何講授呢?主要突出以下幾點:
第一,循序漸進。本課程先從基礎講起,先讓學生熟悉更種字元串操作,掌握字元串的驗證方式。然後結合實際,找一個實際的線上項目,然後分析驗證的方式和方法,講解正則表達式的用法。
第二,項目驅動。全程以項目來驅動知識點的學習,在瞭解實際的需求後,用正則表達式實現我們的需求。
第三,註重實戰。學生在聽完講師的課堂面授後,要親自動手完成另一個新項目。
正則表達式項目開發課程內容包含正則表達式基礎,高級的用法及各種常見驗證的寫法用三個組成部分,具體內容如下:
第一部分:正則表達式的基礎。本部分主要包含三個方面:
正則表達式基礎。內容主要包含正則的語法,常見符號及簡單的表單驗證。
第二部分:高級用法及複雜的正則驗證。
第三部分:找個具體的項目,在實際中體會正則的好處。
四.結語
正則表達式語法簡潔,功能強大,特別在對數據的驗證問題上,在日常數據處理與軟體開發中,正則表達式已成為不可缺少的工具,相信隨著web網的發展,正則表達式的應用會越來越強大越來越易使用。
來源:千鋒html5