常用的正則表達式大全(難倒很多程式設計師的正則表達式是什麼)
2023-09-27 07:28:24
大家好,我是猴哥!猴哥出品,必是精品,點擊關注,給你好看!
持續更新通俗易懂的技術知識,為您護航充電!本文章節內容
什麼是正則表達式?—一個例子看懂正則符號詳解之普通元字符 —[a-z]比N行代碼好用多了正則符號詳解之特殊字符 —簡潔版的元字符正則符號詳解之擴展表示法字符 —比算法都好用兩個實用的正則表達式 —夠你寫半天的代碼本文將對正則表達式進行完整的介紹,以通俗易懂的語言對正則表達式的每個字符功能進行詳細解釋並通過具體示例進行補充說明,旨在讓廣大讀者朋友們迅速掌握正則表達式這項工作技能並加以出色的運用,助力讀者朋友們在腳本語言(Python、JavaScript等)盛行的網際網路時代脫穎而出!
正則表達式
一、神奇的正則表達式是什麼?為讓讀者朋友們先對正則表達式有個大致的概念,本節我們將通過一個非常簡單的示例來解釋正則表達式到底是什麼?如:
正則表達式:[0-9]
表達式解析:[0-9]表示一位0-9之間的任意數字,注意[0-9]只表示一位數字, 號表示前一個正則表達式表示的字符至少重複出現1次以上
表達式功能:表示一位以上的數字,如1,123,,134646757658......除數字外的字符串都不符合該正則表達式
從上例中可以看出,正則表達式其實就是一個描述一種字符串元素組成的符號表達式,字符串只有符合這種格式才是正確的,可以實現一種過濾邏輯功能!
正則表達式雖然描述的是一種字符串元素組成的表達式,但在實際編程應用中是以正則表達式描述的字符串格式來匹配查找對應字符串的。正則表達式可用於各種字符串的檢查、驗證、查找、提取等程序功能開發,如檢查身份證號、密碼、帳戶名等場合!
正則表達式
下面我們將對正則表達式的所有符號及其功能進行詳細的講解,保證讀者朋友們能夠看懂正則表達式並編寫簡單的正則表達式,待大家融會貫通之後結合擴展正則符號,編寫設計複雜且具有強大功能的正則表達式也將不在話下!
神奇的正則表達式
正則表達式是一種由各種符號組成的邏輯公式,本文將把正則符號分為三大類:普通元字符、特殊字符、擴展表示法字符。下面將介紹第一類:正則表達式中的普通元字符!
二、正則符號詳解之普通元字符普通元字符只有十多個,考慮到理解難度問題,我們將對每個元字符以通俗易懂的語言進行再解釋,並結合多個示例再說明,讓讀者朋友們能夠理解更深刻。先來看看正則表達式中的普通元字符有哪些?如下圖:
普通元字符集
先來看普通元字符功能與示例:
▲元字符1: value —表示與value字面字符一致的查找功能,如
abc:表示匹配查找含abc的字符串,例如可匹配查找123abc456、abcdef中的abc▲元字符2:regex1|regex2 —表示正則表達式regex1或regex2,如
abc|123:表示查找含abc或123的字符串,例如可查找123abc456、abcdef123中的abc和123▲元字符3:.(點)—表示查找除空格和空行之外的任何單個單字符,如字母,數字,符號等等
▲元字符4:^ —匹配查找字符串起始部分,如
^abc:匹配查找字符串開頭為abc的字符串,例如可匹配查找abcdef中的abc,不可匹配查找ababcdef中的abc▲元字符5:$ —匹配查找字符結尾部分,如
abc$:匹配查找字符串結尾為abc的字符串,例如匹配查找defabc中的abc,不可匹配查找abcdef中的abc▲元字符6:* —在*前的第一個正則表達式表示的字符至少出現0次以上,如
[0-9]*:[0-9]表示一位數字,那麼[0-9]*表示匹配查找出現0次以上的數字字符串▲元字符7: —在前的第一個正則表達式表示的字符至少出現1次以上,如
[0-9] :[0-9]表示一位數字,那麼[0-9] 表示匹配查找出現1次以上的數字字符串▲元字符8:? —在?前的第一個正則表達式表示的字符出現0次或1次
▲元字符9:{N} —在{N}前的第一個正則表達式表示的字符出現N次,如
[0-9]{2}:表示匹配查找由2位0-9之間的數字組成的字符串▲元字符10:{X,Y} —在{X,Y}前的第一個正則表達式表示的字符出現X到Y次,如
[0-9]{3,6}:表示匹配查找由3到6位0-9之間的數字組成的字符串▲元字符11:[...] —匹配查找...中的任意單個字符,如
[abc]:表示匹配查找含a或b或c字母的字符串▲元字符12:[p-q] —範圍描述,匹配查找p-q範圍中任意單個字符,如
[0-9]:表示匹配查找0-9之間的任意單個數字▲元字符13:[^...] —非描述符,匹配查找不屬於...表示的任意單個字符,如
[^A-Z]:不匹配查找A-Z之間的大寫字母[^abc]:不匹配查找字母a或b或c▲元字符14:(...) —一個封閉的正則表達式,如
([A-Z]{2}):匹配查找兩個大寫字母對於上面的元字符及其功能,讀者朋友們可能還是不清楚具體怎麼使用,我們舉個實際編程應用中的例子為大家說明。要求:編寫程序檢查用戶輸入的內容是否是純數字,下圖是編程解決方案:
^[0-9] $ — 開頭結尾都是數字,中間也為數字,中間一位數字重複出現1次以上正則表達式檢查數字
三、正則符號詳解之特殊字符正則表達式的第二類正則符號—特殊字符,可以理解為簡潔版的普通元字符,常見的特殊字符有:
以下是文字描述,便於讀者複製保存:
▲特殊字符1:\d —表示匹配查找單個數字字符,等價於[0-9]
▲特殊字符2:\D —表示不匹配查找單個數字字符,等價於[^0-9]
▲特殊字符3:\w —表示匹配查找單個字母或數字字符,等價於[a-zA-Z0-9]
▲特殊字符4:\W —表示不匹配查找單個字母或數字字符,等價於[^a-zA-Z0-9]
▲特殊字符5:\b —表示匹配查找單詞(字符到空格直接的字符串)邊界,如
\bab:表示可匹配查找able、abnormal等單詞中的ab,不能匹配cable中的aby\b:表示可匹配查找enjoy、city等單詞中的y,不能匹配ayc_13ab中的y▲特殊字符6:\B—表示不匹配查找單詞邊界,如
ew\B:表示可匹配查找yavewafg中的ew,但不能匹配查找new中的ew▲特殊字符7:\s—表示匹配查找空字符,等價於[\n\t\r\v\f](換行符/制表符/回車符/垂直制表符/換頁符/)
▲特殊字符8:\S—表示不匹配查找空字符,等價於[^\n\t\r\v\f]
▲特殊字符9:\A—表示匹配查找字符串開頭,等價於 ^
▲特殊字符10:\Z—表示匹配查找字符串結尾,等價於 $
▲特殊字符11:\x—類似編程中的轉義字符,表示匹配查找特殊字符,如
\?:匹配查找問號\.:匹配查找點號\*:匹配查找星號\ :匹配查找加號......四、正則符號詳解之擴展表示法字符 —比算法都好用提到正則表達式的擴展表示法時,要給大家強調一下,擴展表示法字符實用的只有四個,分別是:(?=…)、(?!…)、(?<=…)、(?<!…)。需要說明的是(?:)與擴展表示法根本就不是一類,儘管很多書籍將其歸為擴展表示法,但實際上它只是形式相似而已,所以讀者朋友們不必過度在意這個字符,本文也不做贅述。
在詳細介紹四種擴展表示法之前,我們先要說明一個概念——斷言,又叫預查或環視,先來看術語解釋:
四種擴展表示法
什麼意思呢?下面我們來看解釋,比如說你想提取某個文本中的IP位址,如192.168.***.***,但文本中存在一種情況「56192.168.***.***6564」,雖然這個字符串中存在192.168.***.***,但顯然它不是有效的IP位址,也就是說我們在查找IP位址 192.168.***.***的時候,其前後都不能是數字,那麼我們就需要提前查看或者環視周圍,擴展表示法就起到了這樣的作用,如匹配查找office單詞:
office(?=2003|2007|365):只能匹配查找office2003或者office2007或office365中的office,無法匹配office2010中的office,匹配結果只包含office,稱為非獲取匹配查找office(?!2003|2007|365):可以匹配查找office2010中的office,而無法匹配office2003或者office2007或office365中的office,匹配結果只包含office,稱為非獲取匹配查找(?<=上海|北京)人:只能匹配查找上海人或北京人中「人」,而無法匹配廣州人中的「人」,匹配結果只包含「人」,稱為非獲取匹配查找(?<!上海|北京)人:只能匹配查找非上海人或北京人中「人」,如廣州人中的「人」,而無法匹配上海人或北京人中「人」,匹配結果只包含「人」,稱為非獲取匹配查找關於具體的編程應用案例,感興趣的讀者朋友可以直接用今日頭條app上方的搜索框輸入:「程式設計師水平進階之正則表達式」,進入專欄進行查看:
頭條搜索
五、附上兩個實用的正則表達式 —夠你寫半天的代碼關於以下兩種正則表達式的詳細解釋可參見文章「程序猿技能進階:設計一條檢查用戶名是否合法的正則表達式」與文章「程序猿技能進階:一條正則表達式檢查用戶密碼的合法性」。
★ 檢查用戶名是否符合要求的正則表達式:
//要求一:用戶名必須以字母開頭
//要求二:用戶名只能包含大小寫字母、數字、下劃線
//要求三:總長度為6~16位
//用於檢查驗證用戶名是否符合上述要求的正則表達式:^[a-zA-Z][a-zA-Z0-9_]{5,15}$
★ 檢查用戶密碼設置是否符合要求的正則表達式:
正則表達式:((?!^[0-9] $)(?!^[A-Z] $)(?!^[a-z] $)(?!^[^A-Za-z0-9] $))^.[^\s]{8,16}$
註:((?!...)(?!...))之間是同時滿足的意思
表示由大小寫英文字母與數字混合組成的6到16位密碼
文中如有不妥之處,敬請批評指正讀者朋友們對於本講內容中有任何疑問,都可以通過評論、私信等方式留言,與其他讀者或者本人進行交流討論,在下將鼎力協助!
正則表達式
,