掌握這套正則全攻略,讓你少寫 1000 行代碼 | 極客時間

2021-02-08 InfoQ

說起正則表達式,相信大家都不陌生。在很多程式設計師的認知中,這東西並不難,在工作中用的也不多,每次用的時候去 Google 搜一搜,然後複製過來改一改,問題就解決了,看起來效率特別高,好像完全沒必要專門花時間和精力去學它。

如果你也是這麼覺得,我只能說,你對正則這個強大的工具,還不夠了解。在我看來,正則就是看似不用沒什麼影響,但一旦熟練應用了,就再也放不下的「效率神器「。

為什麼這麼說?眾所周知,作為計算機領域最偉大的發明之一,正則表達式簡單、強大,極大地提高工作中的文本處理效率。而且幾乎所有的程式語言,無論是前端的 JavaScript、還是後端的 Java、Python,以及各大作業系統、文本編輯器都支持正則表達式。

可以說,它圍繞在日常工作中的方方面面。比如,我們經常需要從大段文本中抽取需要的內容,學會使用正則之後,不用寫代碼就可以完成類似的日常工作。舉個例子,假如我們在 Sublime Text 3 中使用正則,查找重複出現的單詞,並且想把它替換成單個單詞。

菜單中的 Find -> Replace,在查找欄中輸入 (\w+) \1,在替換欄中輸入子組的引用 \1 ,然後點擊 Replace All 就可以完成替換工作了。這樣,通過少量的正則,我們就完成了文本的處理工作了。是不是很方便呢?

用了正則後,你會發現,之前 20 分鐘才能解決的問題,現在 2 分鐘就可以搞定,比如你還可以利用它來校驗數據的有效性,判斷用戶輸入的手機號是不是符合規則;也可以從文本中提取想要的內容,比如從網頁中抽取數據;還可以用來做文本內容替換,從而得到我們想要的內容等等。

這些需要耗時很長的工作,用正則分分鐘就可以解決。毫不誇張的說,學會靈活應用正則,能夠讓你至少可以少寫 1000 行代碼。

正則是真的強,但感覺很複雜,記不住,一學就勸退啊?

相信這是不少人的心聲,其實,你之所以覺得正則」難學難記「,究其根本,還是因為:

用的時候,依靠從網上複製粘貼,運行全憑運氣,對於如何構成,不求甚解;

不懂正則表達式的底層原理和邏輯,在網上找到的正則總與自己的需求有些出入,看不懂,也不會改,達不到預期的效果,或者容易出現性能問題;

不重視正則,覺得沒有必要專門花心思學,用的時候才發現「方恨少「。

總結起來,就是沒有系統學習正則、沒有高效的學習記憶法。早在之前我在極客時間上做過一個講解正則「視頻」,就曾經給這些問題提供過一些解決思路。

在視頻中,關於正則記憶和使用,我提煉過一套學習圖譜,得到了不少同學的熱烈反響,但時長有限,無法展開細講。所以,這次我在極客時間推出了《正則表達式入門課》專欄,想用通俗易懂的方式,給你套正則的系統學習路徑,通過多場景的案例,帶你實操正則應用,真正做到可以跨平臺、多語言活學活用,讓正則這個強大的工具在你手上發揮出真正的威力。

立即掃碼,免費試讀👆結算時,

輸入優惠口令「weizhong9」

到手價 ¥ 50 ,立省 ¥ 18

僅限「前 200 人」有效

為了幫你事半功倍的學習正則,在這裡,我也把我整理的記憶腦圖中的「元字符」部分,分享給你,建議收藏👇

優秀的程式設計師,不會用行動的勤奮來掩蓋思考和學習的懶惰,與其用的時候再去查,修修補補,真正系統學會正則,才可以真正提高你的工作效率。

我是塗偉忠,現任某大型企業高級研發工程師,工作以來一直從事後端服務研發工作,在服務端開發方面有非常豐富的實戰經驗。編程十多年來,一直堅持技術輸出,著有《Django 開發從入門到實踐》一書,也是極客時間每日一課《15 分鐘帶你快速掌握正則表達式》的作者。

為了真正解決大家「系統學習正則」這一核心的需求,我在設計課程時,會先帶你掌握正則重要的概念和功能,再以工作中的真實案例,帶你實操應用。基於整個思路,課程共兩個模塊:

正則的很多基本知識其實並不難,只是難記,記住並理解它,才是我們的最終目的。所以這部分我將講述正則的基礎概念和知識,比如正則元字符、匹配模式等,幫助大家巧妙記憶正則,並系統地建立有關正則的基礎框架。

這裡我主要講正則的進階內容,比如:

正則中的斷言,包括單詞邊界、行開始和結束、環視;

正則中的主要流派,以及對應的軟體實現;

正則的工作機制和常見的優化方式等;

不同編譯器裡的正則都有什麼不同?

....

通過這些內容,可以讓你更加遊刃有餘地使用正則,也可以避過很多坑。比如,為什麼在程式語言中能工作的正則,在 Linux 命令 grep 中就不能工作了呢?正則匹配的原理又是什麼?如何寫出性能更好的正則呢?等等,讓你把正則這個工具更好地落地到實際工作中。

正則表達式的系統學習路徑

事半功倍的分類記憶法

30+ 常見問題及解決方案

多場景案例實操正則應用

1 分鐘看看目錄,相信你會有所得👇

1 早鳥優惠 ¥55,原價 ¥68,結算時,輸入優惠口令:「weizhong9」,到手價 ¥ 50,立省 ¥18 ,僅限「前 200 人」有效

2 訂閱後分享海報,每邀請一位好友訂閱,可得 ¥18 返現,多邀多得,上不封頂。

👆 立即掃碼,免費試讀

溫馨提示:

訂閱後可通過「極客時間 App」或「極客時間小程序」我的 - 已購,學習已訂閱的專欄。


👇點擊「閱讀原文」,

輸入優惠口令「weizhong9」,

以最低價 ¥50 入手,僅限 前 200 人。

相關焦點

  • 專屬於極客的代碼符號
    那麼你會問了,怎樣才能告訴全世界你是一名極客呢?你可以採用國際通用的極客代碼符號!通過這種特殊的代碼符號,你可以讓其他不熟悉你的極客們通過代碼符號的形式對你有所認知和了解。表現自己極客特徵的最好方式就是在你的籤名檔或者博客中展示出自己的極客代碼符號,讓它傳播的越廣越好。極客的種類很多,涉及的範圍也比較廣。本文將重點介紹有關計算機科學方面的極客代碼符號。
  • 學了Scratch還不會寫代碼?極客晨星想實現圖形化編程到碼代碼的銜接
    學了Scratch還不會寫代碼?極客晨星想實現圖形化編程到碼代碼的銜接 作者:東耳 發布時間: 2018-01-29 07:00
  • 正則表達式真的很6,可惜你不會寫
    他們都提供相應的接口 / 函數支持正則表達式。但很神奇的是:無論你大學選擇哪一門計算機語言,都沒有關於正則表達式的課程給你修,在你學會正則之前,你只能看著那些正則大師們,寫了一串外星文似的字符串,替代了你用一大篇幅的 if else 代碼來做一些數據校驗。
  • Python正則表達式,這一篇就夠了!
    大多數程式語言的正則表達式設計都師從Perl,所以語法基本相似,不同的是每種語言都有自己的函數去支持正則,今天我們就來學習 Python中關於 正則表達式的函數。re模塊主要定義了9個常量、12個函數、1個異常,每個常量和函數豬哥都會通過實際代碼案例講解,讓大家能更直觀的了解其作用!註:為避免出現代碼格式錯亂,豬哥儘量使用代碼截圖演示哦。
  • 正則表達式入門教程 + 免費在線正則測試工具推薦
    正則表達式在計算機領域幾乎無所不在,但它又很難掌握,新手容易犯暈。如果你還處於入門學習階段,單靠腦子憑空寫一些複雜的正則,很難保證準確性,後面往往要花費大量時間去調試。其實,藉助一些可視化的正則測試工具網站,不僅能節省大量時間,還能對正則有更深的理解……什麼是正則表達式?
  • 極客學院|從爆炸力學到代碼世界,我拒絕「穩定」的生活
    近幾年,隨著研究所科研人員日益年輕化,進入相關專業研究所的機會越來越少。從去年下學期求職開始,一直找不到合適的研究所籤約。特別是當「雙985」這類條件擺在眼前的時候,作為一個本科非985,211工程院校畢業生的我來說就比較尷尬了。當發現計算機相關專業的小夥伴紛紛拿到了如雪片般的offer,心中充滿羨慕之情。
  • 正則表達式查找電話和姓名
    將以上的描述用正則表達式代碼表述出來就是 \s*(\W+)電話\s*(\d+[-#]\d+)知道正則表達式怎麼寫就可以套入到VBA中了,具體的VBA代碼是Option ExplicitSub text()Dim i As Long, u As
  • 5分鐘完全掌握正則表達式
    正則表達式在爬蟲中也經常使用到,例如只需要簡單的幾行代碼,就可以獲取h1標籤下的所有內容。</h1>', html)print(content)#result [' test1 ', ' test2 ', ' test3 ']那正則表達式到底是什麼,又該如何使用,為什麼我們爬蟲中老是使用(.*?),它到底起到了什麼作用,這篇文章就詳細告訴你。
  • Python正則表達式總結
    大多數程式語言的正則表達式設計都師從Perl,所以語法基本相似,不同的是每種語言都有自己的函數去支持正則,今天我們就來學習 Python中關於 正則表達式的函數。re模塊主要定義了9個常量、12個函數、1個異常,每個常量和函數豬哥都會通過實際代碼案例講解,讓大家能更直觀的了解其作用!註:為避免出現代碼格式錯亂,豬哥儘量使用代碼截圖演示哦。
  • IT行業裡,好的程式設計師一天應該寫多少行代碼?
    今天大概寫了4個函數,昨天寫了5個函數,每個函數大概20行左右吧,都快累死了~~~也不知道和優秀的程式設計師差多少。不知道大家每天都寫多少~~~~1樓曾經有個專家說,每天精華代碼是1行。誇張了。邏輯複雜的代碼,80行,你已經算高效的了。
  • 正則表達式在VBA中間是如何應用?正則表達式的實現方式?
    在繼續學習正則元字符特性或編制自己的正則表達式時,常常需要對其測試.也可以自己編制VBA代碼進行測試,這樣做的好處是可以提高在今後實際工作應用正則表達式的能力。所以,先介紹正則與VBA的交互的相關知識,讓你在VBA中間使用正則表達式遊刃有餘。當然你也可以快速閱讀或直接越過本章內容,在你以後的實際具體工作應用時,直接查閱即可。
  • 正則表達式真的很騷,可惜你不會寫!!!
    他們都提供相應的接口/函數支持正則表達式。但很神奇的是:無論你大學選擇哪一門計算機語言,都沒有關於正則表達式的課程給你修,在你學會正則之前,你只能看著那些正則大師們,寫了一串外星文似的字符串,替代了你用一大篇幅的if else代碼來做一些數據校驗。
  • 如何用 Python 和正則表達式抽取文本結構化信息?
    讀過本文後,希望你能找到答案。樣例這裡,我們舉一個極端簡化的中文文本抽取信息例子。之所以這樣做,是為了避免你在解讀數據上花費太多時間。我更希望,你能夠聚焦於方法,從而掌握新知。正則「正則表達式」 這個名字,初聽起來好像很玄妙。實際上,它是從英文 「regular expression」 翻譯過來的。如果譯成白話,那就是 「有規律的表述形式」。這,聽起來,是不是就更加接地氣了?但是,給你補一下 「假行家 101」 課程:說別人聽得懂的話,你能唬得住誰?
  • 如何正確使用極客戰記成為編程大神?
    ——如果沒有發現,你或許需要返回關卡,認真看看提示。這一關的編程知識你懂了嗎?——不懂,那你可以閱讀提示,或從本關裡找到相應知識的代碼,單獨對它進行分析。這一關的所有代碼你都認真閱讀並理解其作用了嗎?——沒有,那你可以注釋掉你不明白的代碼,觀察當這段代碼消失時,遊戲會發生什麼變化。
  • 看完你就會正則表達式了
    最近看了一篇關於正則表達式的學習筆記,覺得講的非常好,更有圖形化的神器相助,想不學會都難,所以想轉給大家看看。話說不是開發為啥要學正則表達式這種看似很晦澀的東西呢,因為現在很多搜索的場景都是支持正則表達式的,學會了正則表達式就有如一把利劍在手。本文較長,建議抽40分鐘完整的時間一次讀完再慢慢消化。
  • 刨根究底正則表達式(1):開篇
    、字節序(即大小端表示)、浮點數實現、日期時間處理以及正則表達式等。記得被大家稱之為「輪子哥」的大神級程式設計師vczh在知乎上說過,當初被正則表達式虐得一氣之下,乾脆自己寫了一個正則引擎(源碼託管在Github上),才算真正徹底搞懂正則表達式(於是被戲稱為「一言不合」就造輪子)。當然不是每個程式設計師都能像「輪子哥」這樣生猛,但即便都有這麼生猛,似乎也沒必要都像他一樣自己花費大量時間再造一個正則引擎的「輪子」。
  • Python正則表達式急速入門
    在閱讀這篇文章前你需要掌握 Python 基礎知識,或者具有其他開發語言的基礎知識也可以,因為基本上每種語言使用正則表達式的方式都是類似的。零、正則表達式基礎1.提取字符(串)有時我們需要從一個字符串中獲取一段內容,這段內容可能是一個字符也可能是一段字符串,如果用逐字對比遍歷的話不僅耗時耗力而且還容易出錯。那麼這個時候我們就可以用到正則表達式中的 字符匹配功能。
  • 一個小實驗 | 極客時間
    對於新手來說,要在技術這條路上穩紮穩打走下去,紮實的掌握一門語言是其一,其二就是要有基本的算法能力,這個非常重要。對於進階的用戶,更多技術棧的掌握肯定是必須的了,另外,也需要你學習高階算法,掌握這些技術棧匹配的算法技能。
  • 正則表達式入門教程(下)
    比如想查找除了數字以外,其它任意字符都行的情況,這時需要用到反義:表3.常用的反義代碼代碼/語法說明\W匹配任意不是字母,數字,下劃線,漢字的字符\S匹配任意不是空白符的字符\D匹配任意非數字的字符\B匹配不是單詞開頭或結束的位置[^x]匹配除了x以外的任意字符[^aeiou]匹配除了aeiou這幾個字母以外的任意字符例子:\S+匹配不包含空白符的字符串
  • 學習爬蟲的第49天,正則表達式被我踩在腳下
    好在有朋友在評論區告訴我:不用太在乎 bs4 了,正則表達式學好就行了,效率不是 bs4 可以比的。一下子點燃了我前進的道路、又讓我變得元氣滿滿。巧合的是,今天老師就開始講正則表達式了,這就是命中注定吧。正則表達式 描述了一種字符串匹配的模式,可以用來檢查一個字符串是否含有某種子串、將匹配的子串替換或者從某個串中取出符合某個條件的子串等。