一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

難倒很多程序員的正則表達(dá)式是什么?一文看懂神奇的正則表達(dá)式

 曾淼Mark 2019-12-20

持續(xù)更新通俗易懂的技術(shù)知識(shí),為您護(hù)航充電!

本文章節(jié)內(nèi)容

  • 什么是正則表達(dá)式?—一個(gè)例子看懂

  • 正則符號(hào)詳解之普通元字符—[a-z]比N行代碼好用多了

  • 正則符號(hào)詳解之特殊字符—簡(jiǎn)潔版的元字符

  • 正則符號(hào)詳解之?dāng)U展表示法字符—比算法都好用

  • 兩個(gè)實(shí)用的正則表達(dá)式—夠你寫半天的代碼

本文將對(duì)正則表達(dá)式進(jìn)行完整的介紹,以通俗易懂的語言對(duì)正則表達(dá)式的每個(gè)字符功能進(jìn)行詳細(xì)解釋并通過具體示例進(jìn)行補(bǔ)充說明旨在讓廣大讀者朋友們迅速掌握正則表達(dá)式這項(xiàng)工作技能并加以出色的運(yùn)用,助力讀者朋友們?cè)谀_本語言(Python、JavaScript等)盛行的互聯(lián)網(wǎng)時(shí)代脫穎而出!

難倒很多程序員的正則表達(dá)式是什么?一文看懂神奇的正則表達(dá)式

正則表達(dá)式

一、神奇的正則表達(dá)式是什么?

為讓讀者朋友們先對(duì)正則表達(dá)式有個(gè)大致的概念,本節(jié)我們將通過一個(gè)非常簡(jiǎn)單的示例來解釋正則表達(dá)式到底是什么?如:

正則表達(dá)式:[0-9]

表達(dá)式解析:[0-9]表示一位0-9之間的任意數(shù)字,注意[0-9]只表示一位數(shù)字, 號(hào)表示前一個(gè)正則表達(dá)式表示的字符至少重復(fù)出現(xiàn)1次以上

表達(dá)式功能:表示一位以上的數(shù)字,如1,123,,134646757658......除數(shù)字外的字符串都不符合該正則表達(dá)式

從上例中可以看出,正則表達(dá)式其實(shí)就是一個(gè)描述一種字符串元素組成的符號(hào)表達(dá)式,字符串只有符合這種格式才是正確的,可以實(shí)現(xiàn)一種過濾邏輯功能!

正則表達(dá)式雖然描述的是一種字符串元素組成的表達(dá)式,但在實(shí)際編程應(yīng)用中是以正則表達(dá)式描述的字符串格式來匹配查找對(duì)應(yīng)字符串的。正則表達(dá)式可用于各種字符串的檢查、驗(yàn)證、查找、提取等程序功能開發(fā),如檢查身份證號(hào)、密碼、賬戶名等場(chǎng)合!

難倒很多程序員的正則表達(dá)式是什么?一文看懂神奇的正則表達(dá)式

正則表達(dá)式

下面我們將對(duì)正則表達(dá)式的所有符號(hào)及其功能進(jìn)行詳細(xì)的講解,保證讀者朋友們能夠看懂正則表達(dá)式并編寫簡(jiǎn)單的正則表達(dá)式,待大家融會(huì)貫通之后結(jié)合擴(kuò)展正則符號(hào),編寫設(shè)計(jì)復(fù)雜且具有強(qiáng)大功能的正則表達(dá)式也將不在話下!

難倒很多程序員的正則表達(dá)式是什么?一文看懂神奇的正則表達(dá)式

神奇的正則表達(dá)式

正則表達(dá)式是一種由各種符號(hào)組成的邏輯公式,本文將把正則符號(hào)分為三大類:普通元字符、特殊字符、擴(kuò)展表示法字符。下面將介紹第一類:正則表達(dá)式中的普通元字符!

二、正則符號(hào)詳解之普通元字符

普通元字符只有十多個(gè),考慮到理解難度問題,我們將對(duì)每個(gè)元字符以通俗易懂的語言進(jìn)行再解釋,并結(jié)合多個(gè)示例再說明,讓讀者朋友們能夠理解更深刻。先來看看正則表達(dá)式中的普通元字符有哪些?如下圖:

難倒很多程序員的正則表達(dá)式是什么?一文看懂神奇的正則表達(dá)式

普通元字符集

先來看普通元字符功能與示例:

元字符1: value—表示與value字面字符一致的查找功能,如

  • abc:表示匹配查找含abc的字符串,例如可匹配查找123abc456、abcdef中的abc

元字符2:regex1|regex2—表示正則表達(dá)式regex1regex2,如

  • abc|123:表示查找含abc或123的字符串,例如可查找123abc456、abcdef123中的abc和123

元字符3:.(點(diǎn))—表示查找除空格和空行之外的任何單個(gè)單字符,如字母,數(shù)字,符號(hào)等等

元字符4:^ —匹配查找字符串起始部分,如

  • ^abc:匹配查找字符串開頭為abc的字符串,例如可匹配查找abcdef中的abc,不可匹配查找ababcdef中的abc

元字符5:$ —匹配查找字符結(jié)尾部分,如

  • abc$:匹配查找字符串結(jié)尾為abc的字符串,例如匹配查找defabc中的abc,不可匹配查找abcdef中的abc

元字符6:* —*前的第一個(gè)正則表達(dá)式表示的字符至少出現(xiàn)0次以上,如

  • [0-9]*:[0-9]表示一位數(shù)字,那么[0-9]*表示匹配查找出現(xiàn)0次以上的數(shù)字字符串

元字符7: — 前的第一個(gè)正則表達(dá)式表示的字符至少出現(xiàn)1次以上,如

  • [0-9] :[0-9]表示一位數(shù)字,那么[0-9] 表示匹配查找出現(xiàn)1次以上的數(shù)字字符串

元字符8:? —?前的第一個(gè)正則表達(dá)式表示的字符出現(xiàn)0次或1次

元字符9:{N} —{N}前的第一個(gè)正則表達(dá)式表示的字符出現(xiàn)N次,如

  • [0-9]{2}:表示匹配查找由2位0-9之間的數(shù)字組成的字符串

元字符10:{X,Y} —{X,Y}前的第一個(gè)正則表達(dá)式表示的字符出現(xiàn)X到Y(jié)次,如

  • [0-9]{3,6}:表示匹配查找由3到6位0-9之間的數(shù)字組成的字符串

元字符11:[...] —匹配查找...中的任意單個(gè)字符,如

  • [abc]:表示匹配查找含a或b或c字母的字符串

元字符12:[p-q] —范圍描述,匹配查找p-q范圍中任意單個(gè)字符,如

  • [0-9]:表示匹配查找0-9之間的任意單個(gè)數(shù)字

元字符13:[^...] —非描述符匹配查找不屬于...表示的任意單個(gè)字符,如

  • [^A-Z]:不匹配查找A-Z之間的大寫字母

  • [^abc]:不匹配查找字母a或b或c

元字符14:(...) —一個(gè)封閉的正則表達(dá)式,如

  • ([A-Z]{2}):匹配查找兩個(gè)大寫字母

對(duì)于上面的元字符及其功能,讀者朋友們可能還是不清楚具體怎么使用,我們舉個(gè)實(shí)際編程應(yīng)用中的例子為大家說明。要求:編寫程序檢查用戶輸入的內(nèi)容是否是純數(shù)字,下圖是編程解決方案:

  • ^[0-9] $ — 開頭結(jié)尾都是數(shù)字,中間也為數(shù)字,中間一位數(shù)字重復(fù)出現(xiàn)1次以上

難倒很多程序員的正則表達(dá)式是什么?一文看懂神奇的正則表達(dá)式

正則表達(dá)式檢查數(shù)字

三、正則符號(hào)詳解之特殊字符

正則表達(dá)式的第二類正則符號(hào)—特殊字符,可以理解為簡(jiǎn)潔版的普通元字符,常見的特殊字符有:

難倒很多程序員的正則表達(dá)式是什么?一文看懂神奇的正則表達(dá)式

以下是文字描述,便于讀者復(fù)制保存:

特殊字符1:\d —表示匹配查找單個(gè)數(shù)字字符,等價(jià)于[0-9]

特殊字符2:\D —表示不匹配查找單個(gè)數(shù)字字符,等價(jià)于[^0-9]

特殊字符3:\w —表示匹配查找單個(gè)字母或數(shù)字字符,等價(jià)于[a-zA-Z0-9]

特殊字符4:\W —表示不匹配查找單個(gè)字母或數(shù)字字符,等價(jià)于[^a-zA-Z0-9]

特殊字符5:\b —表示匹配查找單詞(字符到空格直接的字符串)邊界,如

  • \bab:表示可匹配查找able、abnormal等單詞中的ab,不能匹配cable中的ab

  • y\b:表示可匹配查找enjoy、city等單詞中的y,不能匹配ayc_13ab中的y

特殊字符6:\B—表示不匹配查找單詞邊界,如

  • ew\B:表示可匹配查找yavewafg中的ew,但不能匹配查找new中的ew

特殊字符7:\s—表示匹配查找空字符,等價(jià)于[\n\t\r\v\f](換行符/制表符/回車符/垂直制表符/換頁符/)

特殊字符8:\S—表示不匹配查找空字符,等價(jià)于[^\n\t\r\v\f]

特殊字符9:\A—表示匹配查找字符串開頭,等價(jià)于 ^

特殊字符10:\Z—表示匹配查找字符串結(jié)尾,等價(jià)于 $

特殊字符11:\x—類似編程中的轉(zhuǎn)義字符,表示匹配查找特殊字符,如

  • \?:匹配查找問號(hào)

  • \.:匹配查找點(diǎn)號(hào)

  • \*:匹配查找星號(hào)

  • \ :匹配查找加號(hào)

  • ......

四、正則符號(hào)詳解之?dāng)U展表示法字符—比算法都好用

提到正則表達(dá)式的擴(kuò)展表示法時(shí),要給大家強(qiáng)調(diào)一下,擴(kuò)展表示法字符實(shí)用的只有四個(gè),分別是:(?=…)、(?!…)、(?<=…)、(?<!…)。需要說明的是(?:)與擴(kuò)展表示法根本就不是一類,盡管很多書籍將其歸為擴(kuò)展表示法,但實(shí)際上它只是形式相似而已,所以讀者朋友們不必過度在意這個(gè)字符,本文也不做贅述。

在詳細(xì)介紹四種擴(kuò)展表示法之前,我們先要說明一個(gè)概念——斷言,又叫預(yù)查或環(huán)視,先來看術(shù)語解釋:

難倒很多程序員的正則表達(dá)式是什么?一文看懂神奇的正則表達(dá)式

四種擴(kuò)展表示法

什么意思呢?下面我們來看解釋,比如說你想提取某個(gè)文本中的IP地址,如192.168.***.***,但文本中存在一種情況“56192.168.***.***6564”,雖然這個(gè)字符串中存在192.168.***.***,但顯然它不是有效的IP地址,也就是說我們?cè)诓檎襂P地址 192.168.***.***的時(shí)候,其前后都不能是數(shù)字,那么我們就需要提前查看或者環(huán)視周圍,擴(kuò)展表示法就起到了這樣的作用,如匹配查找office單詞:

  • office(?=2003|2007|365):只能匹配查找office2003或者office2007或office365中的office,無法匹配office2010中的office,匹配結(jié)果只包含office,稱為非獲取匹配查找

  • office(?!2003|2007|365):可以匹配查找office2010中的office,而無法匹配office2003或者office2007或office365中的office,匹配結(jié)果只包含office,稱為非獲取匹配查找

  • (?<=上海|北京)人:只能匹配查找上海人或北京人中“人”,而無法匹配廣州人中的“人”,匹配結(jié)果只包含“人”,稱為非獲取匹配查找

  • (?<!上海|北京)人:只能匹配查找非上海人或北京人中“人”,如廣州人中的“人”,而無法匹配上海人或北京人中“人”,匹配結(jié)果只包含“人”,稱為非獲取匹配查找

關(guān)于具體的編程應(yīng)用案例,感興趣的讀者朋友可以直接用今日頭條app上方的搜索框輸入:“程序員水平進(jìn)階之正則表達(dá)式”,進(jìn)入專欄進(jìn)行查看:

難倒很多程序員的正則表達(dá)式是什么?一文看懂神奇的正則表達(dá)式

頭條搜索

五、附上兩個(gè)實(shí)用的正則表達(dá)式—夠你寫半天的代碼

關(guān)于以下兩種正則表達(dá)式的詳細(xì)解釋可參見文章“程序猿技能進(jìn)階:設(shè)計(jì)一條檢查用戶名是否合法的正則表達(dá)式”與文章“程序猿技能進(jìn)階:一條正則表達(dá)式檢查用戶密碼的合法性”。

★ 檢查用戶名是否符合要求的正則表達(dá)式:

//要求一:用戶名必須以字母開頭

//要求二:用戶名只能包含大小寫字母、數(shù)字、下劃線

//要求三:總長度為6~16位

//用于檢查驗(yàn)證用戶名是否符合上述要求的正則表達(dá)式: ^[a-zA-Z][a-zA-Z0-9_]{5,15}$

★ 檢查用戶密碼設(shè)置是否符合要求的正則表達(dá)式:

正則表達(dá)式:((?!^[0-9] $)(?!^[A-Z] $)(?!^[a-z] $)(?!^[^A-Za-z0-9] $))^.[^\s]{8,16}$

注:((?!...)(?!...))之間是同時(shí)滿足的意思

表示由大小寫英文字母與數(shù)字混合組成的6到16位密碼

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    九九热在线视频观看最新| 国产韩国日本精品视频| 欧美野外在线刺激在线观看| 精品国产91亚洲一区二区三区| 精品日韩中文字幕视频在线| 国产又猛又大又长又粗| 国产精品亚洲一级av第二区| 伊人网免费在线观看高清版 | 国产一区二区熟女精品免费| 大香蕉伊人精品在线观看| 欧美二区视频在线观看| 国产亚洲精品俞拍视频福利区| 白白操白白在线免费观看| 久久一区内射污污内射亚洲| 91亚洲精品国产一区| 黑丝国产精品一区二区| 久久精品久久精品中文字幕| 国产又猛又大又长又粗| 91偷拍裸体一区二区三区| 麻豆国产精品一区二区三区| 免费在线观看欧美喷水黄片| 国产在线成人免费高清观看av| 久草精品视频精品视频精品 | 精品国产成人av一区二区三区| 一区二区三区18禁看| 太香蕉久久国产精品视频| 这里只有九九热精品视频| 国产日韩熟女中文字幕| 国产av精品一区二区| 白丝美女被插入视频在线观看| 久久精品亚洲情色欧美| 日本欧美一区二区三区高清| 亚洲伦理中文字幕在线观看| 色涩一区二区三区四区| 亚洲欧洲一区二区综合精品| 韩国激情野战视频在线播放| 蜜桃臀欧美日韩国产精品| 99在线视频精品免费播放| 日韩一区中文免费视频| 日本高清中文精品在线不卡| 大香蕉再在线大香蕉再在线|