正則表達式真的很騷,可惜你不會寫!!!

2021-02-19 腳本之家

點擊上方△藍字關注我們

帶你徵服編程和泡妞兩座大山

本文旨在用最通俗的語言講述最枯燥的基本知識

文章提綱:

元字符

重複限定符

分組

轉義

條件或

區間

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

但很神奇的是:無論你大學選擇哪一門計算機語言,都沒有關於正則表達式的課程給你修,在你學會正則之前,你只能看著那些正則大師們,寫了一串外星文似的字符串,替代了你用一大篇幅的if else代碼來做一些數據校驗

既然喜歡,那就動手學唄,可當你百度出一一堆相關資料時,你發現無一不例外的枯燥至極,難以學習(實話說,當年不理君也是這樣的心態😂😂)。

下面,不理君嘗試用一種比較通俗點的方式講一下正則,讓你能在讀完之後,能自己寫出一些簡單的正則,再不濟,能看到別人寫的正則,那也不錯了。

1.元字符

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

元字符說明.匹配除換行符以外的任意字符w匹配字母或數字或下劃線或漢字s匹配任意的空白符d匹配數字
匹配單詞的開始或結束^匹配字符串的開始$匹配字符串的結束

有了元字符之後,我們就可以利用這些元字符來寫一些簡單的正則表達式了,
比如:

匹配有abc開頭的字符串:

1abc或者^abc

匹配8位數字的QQ號碼:

1^dddddddd$

匹配1開頭11位數字的手機號碼:

1^1dddddddddd$

2. 重複限定符

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

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

語法說明*重複零次或更多次+重複一次或更多次?重複零次或一次{n}重複n次{n,}重複n次或更多次{n,m}重複n到m次

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

匹配8位數字的QQ號碼:

1^d{8}$

匹配1開頭11位數字的手機號碼:

1^1d{10}$

匹配銀行卡號是14~18位的數字:

1^d{14,18}$

匹配以a開頭的,0個或多個b結尾的字符串

1^ab*$

3. 分組

從上面的例子(4)中看到,*限定符是作用在與他左邊最近的一個字符,那麼問題來了,如果我想要ab同時被*限定那怎麼辦呢?

正則表達式中用小括號()來做分組,也就是括號中的內容作為一個整體。

因此當我們要匹配多個ab時,我們可以這樣
如:匹配字符串中包含0到多個ab開頭:

1^(ab)*

4. 轉義

我們看到正則表達式用小括號來做分組,那麼問題來了:

如果要匹配的字符串中本身就包含小括號,那是不是衝突?應該怎麼辦?

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

1^((ab))*

5. 條件或

回到我們剛才的手機號匹配,我們都知道:國內號碼都來自三大網,它們都有屬於自己的號段,比如聯通有130/131/132/155/156/185/186/145/176等號段,假如讓我們匹配一個聯通的號碼,那按照我們目前所學到的正則,應該無從下手的,因為這裡包含了一些並列的條件,也就是「或」,那麼在正則中是如何表示「或」的呢?

正則用符號 | 來表示或,也叫做分支條件,當滿足正則裡的分支條件的任何一種條件時,都會當成是匹配成功。

那麼我們就可以用或條件來處理這個問題

1^(130|131|132|155|156|185|186|145|176)d{8}$

6. 區間

看到上面的例子,是不是看到有什麼規律?是不是還有一種想要簡化的衝動?
實際是有的

正則提供一個元字符中括號 [] 來表示區間條件。

限定0到9 可以寫成[0-9]

限定A-Z 寫成[A-Z]

限定某些數字 [165]

那上面的正則我們還改成這樣:

1^((13[0-2])|(15[56])|(18[5-6])|145|176)d{8}$

好了,正則表達式的基本用法就講到這裡了,其實它還有非常多的知識點以及元字符,我們在此只列舉了部分元字符和語法來講,旨在給那些不懂正則或者想學正則但有看不下去文檔的人做一個快速入門級的教程,看完本教程,即使你不能寫出高大上的正則,至少也能寫一些簡單的正則或者看得懂別人寫的正則了,如果需要進階學習,那就靠各位好好修煉啦。

熱門文章回顧:

相關焦點

  • 正則表達式真的很6,可惜你不會寫
    他們都提供相應的接口 / 函數支持正則表達式。但很神奇的是:無論你大學選擇哪一門計算機語言,都沒有關於正則表達式的課程給你修,在你學會正則之前,你只能看著那些正則大師們,寫了一串外星文似的字符串,替代了你用一大篇幅的 if else 代碼來做一些數據校驗。
  • 看完你就會正則表達式了
    後來明白作者的用意,正則表達式是一個規則,用這個規則去從字符串開始匹配到結束(注意計算機讀字符串可是不會分行的,都是一個串,我們看到的多行,人家會認為是個 \t )這裡設計好像小火車的軌道一直開到末尾。digit 傳過一次,3times表示再來三次循環,共4次,後面的once同理。 自己被自己囉嗦到了。接下來,是 one of 在手機正則裡面已經出現了。表示什麼都行。
  • 還不會正則表達式?看這篇!
    大家都很多時候都會覺得正則表達式難記、難學、難用,但不可否認的是正則表達式是一項很重要的技能,所有我將學習和使用正則表達式時的關鍵點整理如下,供大家參考。不同語言中的正則表達式寫法有少許差異,本文將使用Javascript中的語法。什麼是正則表達式?
  • Python正則表達式總結
    默認模式下並不能識別正則表達式中的注釋,而詳細模式是可以識別的。當一個正則表達式十分複雜的時候,詳細模式或許能為你提供另一種注釋方式,但它不應該成為炫技的手段,建議謹慎考慮後使用!上圖案例中我們可以看到,在編寫正則表達式中我們多寫了一個後括號,這導致執行結果報錯;而且是在其他所有案例執行之前,所以說明是在正則表達式編譯時期就報錯了。
  • Python中的正則表達式
    什麼是正則表達式正則表達式是用於處理字符串的強大工具,它使用預定義的特定模式去匹配一類具有共同特徵的字符串,主要用於快速、準確地完成複雜字符串的查找、替換等。正則表達式進行匹配的流程如下圖所示:正則表達式匹配過程是:依次拿出表達式和文本中的字符比較,如果每一個字符都能匹配,則匹配成功;一旦有匹配不成功的字符則匹配失敗。
  • python正則表達式
    111'''112113#7.3.6用花括號匹配特定次數114'''115如果想要一個分組重複特定次數,就在正則表達式中該分組的後面,跟上花括號包圍的數字。116例如,正則表達式(Ha){3}將匹配字符串'HaHaHa',但不會匹配'HaHa',因為後者只重複了117(Ha)分組兩次。
  • 正則表達式在VBA中間是如何應用?正則表達式的實現方式?
    Hi,大家好,本章節開始將會從零開始和大家用圖文的方式,讓你從零基礎學會正則表達式!有興趣的小夥伴可以持續關注我,或者在專欄中進行查看自我學習,願與君攜手前行!在上一個章節說到正則表達式的入門級知識點,本節將會與大家分享一下正則表達式的是具體實現方式是怎麼樣的?
  • 實戰JS正則表達式
    [新建正則表達式]:var  regexp = /aabb/g; //g可省 var  regexp = new Regexp("xyz","g"); //第二個參數可省區別在於:1.採用字面量的寫法新建的正則表達式對象在代碼編譯時就會生成,是平常開發中常用的方式;2.採用構造函數生成的正則對象要在代碼運行時生成。
  • 刨根究底正則表達式(1):開篇
    正則表達式目前市面上並不缺乏專業著作,比如那本被譽為正則表達式學習聖經的《精通正則表達式》就很值得一讀,另外該書的譯者餘晟先生所寫的《正則指引》也不錯。如果僅用於入門,則《正則表達式必知必會》肯定不能錯過,還有網上流傳極廣的《正則表達式30分鐘入門教程》也是不錯的入門資料。但是,結合我自身痛苦的正則表達式學習經歷和運用體會,僅有這些是遠遠不夠的。
  • 正則表達式入門教程 + 免費在線正則測試工具推薦
    正則表達式在計算機領域幾乎無所不在,但它又很難掌握,新手容易犯暈。如果你還處於入門學習階段,單靠腦子憑空寫一些複雜的正則,很難保證準確性,後面往往要花費大量時間去調試。其實,藉助一些可視化的正則測試工具網站,不僅能節省大量時間,還能對正則有更深的理解……什麼是正則表達式?
  • 正則表達式入門教程(下)
    #comment)這種類型的分組不對正則表達式的處理產生任何影響,用於提供注釋讓人閱讀我們已經討論了前兩種語法。第三個(?:exp)不會改變正則表達式的處理方式,只是這樣的組匹配的內容不會像前兩種那樣被捕獲到某個組裡面,也不會擁有組號。「我為什麼會想要這樣做?」——好問題,你覺得為什麼呢?地球人,是不是覺得這些術語名稱太複雜,太難記了?我也有同感。
  • Python正則表達式,這一篇就夠了!
    默認模式下並不能識別正則表達式中的注釋,而詳細模式是可以識別的。當一個正則表達式十分複雜的時候,詳細模式或許能為你提供另一種注釋方式,但它不應該成為炫技的手段,建議謹慎考慮後使用!上圖案例中我們可以看到,在編寫正則表達式中我們多寫了一個後括號,這導致執行結果報錯;而且是在其他所有案例執行之前,所以說明是在正則表達式編譯時期就報錯了。
  • 正則表達式
    在我看來,正則表達式的主要用途有兩種:①查找特定的信息②查找並編輯特定的信息,也就是我們經常用的替換。。比如我們要在Word,記事本等裡面使用快捷鍵Ctrl+F,進行查找一個特定的字符,或者替換一個字符,這就使用了正則表達式。         正則表達式的功能非常強大,尤其是在文本數據進行處理中顯得更加突出。
  • Python 正則表達式-函數用法分析
    Python正則表達式的主要作用是檢索、替換符合匹配規則的文本,什麼時候檢索,什麼時候替換,我們根據需求,選擇最合適的函數。不管是檢索還是替換,都需要匹配規則,我們根據需要編寫了匹配規則,但我們寫的匹配規則計算機並不會直接用來匹配,計算機會把我們寫的匹配規則轉換成它的規則,這個過程我們叫做編譯(compile),這個編譯過程我們看不見,但比較耗時,為了提高效率,就將編譯過後的正則表達式放到緩存中,內存可能會影響其他程序,當我們需要優化佔用內存的時可以清除緩存(purge)。
  • Matlab 正則表達式
    正則表達式是一個非常重要的編程概念,主流的程式語言都對正則表達式進行了很好的支持,Matlab也不例外。本期推文就讓我們來總結一下Matlab提供的正則表達式吧!Matlab 提供的正則表達式庫函數主要有三個:(1) regexp---用於對字符串進行查找,大小寫敏感;(2) regexpi---用於對字符串進行查找,大小寫不敏感;
  • 正則表達式語法
    原子是正則表達式中最基本的組成單位,每個正則表達式中至少包含一個原子。
  • 正則表達式基礎筆記
    正則表達式定義正則表達式聲明1.普通方式
  • Python:正則表達式基本符號總結
    說明:如果需要匹配的字符是正則表達式中的特殊字符,那麼可以使用\進行轉義處理,例如想匹配小數點可以寫成\.就可以了,因為直接寫.會匹配任意字符;同理,想匹配圓括號必須寫成和。在python中,如果使用正則表達式的話,需要導入re模塊,re模塊是一個內置模塊,直接import就可以使用,下面是re模塊中的核心函數。
  • 給JAVA程式設計師的正則表達式一課
    「不會正則表達式,就算寫遍代碼也嘛不是」。說到正則表達式,可能動態語言的碼農Perl,Python,JS甚至是Golang的開發人員可能都熟悉。對Java碼農來說,可能CURD手到擒來,Spring Stuts Hibernat耳聞能詳,但是說到Regex RE模式,可能熟練的少。那麼,今天蟲蟲就來給廣大Java碼農來補補正則的課。
  • Python正則表達式急速入門
    正則表達式在程序開發中會經常用到,比如數據(格式)驗證、替換字符內容以及提取字符串內容等等情況都會用到,但是目前許多開發人員對於正則表達式只是處於了解或者是基本會用的階段。一旦遇到大批量使用正則表達式的情況(例如網絡爬蟲)可以說基本上就抓瞎了。這篇文章我將帶領大家利用 Python 來學習一下正則表達式。