1. 程式人生 > 其它 >正則表示式——基礎篇

正則表示式——基礎篇

正則表示式在幾乎所有語言中都可以使用,無論是前端的JavaScript、還是後端的Java、c#。他們都提供相應的介面/函式支援正則表示式。

正則基礎知識點:
1.元字元

萬物皆有緣,正則也是如此,元字元是構造正則表示式的一種基本元素。我們先來記幾個常用的元字元:

有了元字元之後,我們就可以利用這些元字元來寫一些簡單的正則表示式了,比如:
匹配有abc開頭的字串: \babc或者^abc
匹配8位數字的QQ號碼: ^\d\d\d\d\d\d\d\d$
匹配1開頭11位數字的手機號碼: ^1\d\d\d\d\d\d\d\d\d\d$

  1. 重複限定符

有了元字元就可以寫不少的正則表示式了,但細心的你們可能會發現:別人寫的正則簡潔明瞭,而不理君寫的正則一堆亂七八糟而且重複的元字元組成的。
正則沒提供辦法處理這些重複的元字元嗎?答案是有的!

為了處理這些重複問題,正則表示式中一些重複限定符,把重複部分用合適的限定符替代,下面我們來看一些限定符:

有了這些限定符之後,我們就可以對之前的正則表示式進行改造了,比如:

  1. 匹配8位數字的QQ號碼: ^\d{8}$
  2. 匹配1開頭11位數字的手機號碼: ^1\d{10}$
  3. 匹配銀行卡號是14~18位的數字: ^\d{14,18}$
  4. 匹配以a開頭的,0個或多個b結尾的字串:^ab*$

3.分組
從上面的例子(4)中看到,限定符是作用在與他左邊最近的一個字元,那麼問題來了,如果我想要ab同時被限定那怎麼辦呢?
正則表示式中用小括號()來做分組,也就是括號中的內容作為一個整體。
因此當我們要匹配多個ab時,我們可以這樣如:
匹配字串中包含0到多個ab開頭: ^(ab)*。

4.轉義

我們看到正則表示式用小括號來做分組,那麼問題來了:如果要匹配的字串中本身就包含小括號,那是不是衝突?應該怎麼辦?

針對這種情況,正則提供了轉義的方式,也就是要把這些元字元、限定符或者關鍵字轉義成普通的字元,做法很簡答,就是在要轉義的字元前面加個斜槓,也就是\即可。如:
要匹配以(ab)開頭: ^((ab))*

5.條件或
回到我們剛才的手機號匹配,我們都知道:國內號碼都來自三大網,它們都有屬於自己的號段,比如聯通 130/131/132/155/156/185/186/145/176等號段,假如讓我們匹配一個聯通的號碼,那按照我們目前所學到的正則,應該無從下手的,因為這裡包含了一些並列的條件,也就是“或”,那麼在正則中是如何表示“或”的呢?
正則用符號 | 來表示或,也叫做分支條件,當滿足正則裡的分支條件的任何一種條件時,都會當成是匹配成功。
那麼我們就可以用或條件來處理這個問題^(130|131|132|155|156|185|186|145|176)\d{8}$

6.區間
看到上面的例子,是不是看到有什麼規律?是不是還有一種想要簡化的衝動?實際是有的正則提供一個元字元中括號 [] 來表示區間條件。
限定0到9 可以寫成[0-9]限定A-Z 寫成[A-Z]限定某些數字 [165]那上面的正則我們還改成這樣: ^((13[0-2])|(15[56])|(18[5-6])|145|176)\d{8}$

好了,正則表示式的基本用法就講到這裡了,其實它還有非常多的知識點以及元字元,在此只列舉了部分元字元和語法來講,旨在給正則做一個快速入門級的教程,看完本教程,至少也能寫一些簡單的正則或者看得懂別人寫的正則了。