国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

正則表達(dá)式之ip地址匹配(詳細(xì)講解)

這篇具有很好參考價(jià)值的文章主要介紹了正則表達(dá)式之ip地址匹配(詳細(xì)講解)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

一、正則匹配基本知識(shí)及概念

在練習(xí)之前,需要大家知道一些基本知識(shí),如果有一定基礎(chǔ)的可以跳過該步驟,直接往下看。
正則表達(dá)式-字符類

[abc]:代表a或者b,或者c字符中的一個(gè)。
[^abc]:代表除a,b,c以外的任何字符。
[a-z]:代表a-z的所有小寫字符中的一個(gè)。
[A-Z]:代表A-Z的所有大寫字符中的一個(gè)。
[0-9]:代表0-9之間的某一個(gè)數(shù)字字符。
[a-zA-Z0-9]:代表a-z或者A-Z或者0-9之間的任意一個(gè)字符。
[a-dm-p]:a 到 d 或 m 到 p之間的任意一個(gè)字符。

正則表達(dá)式-邏輯運(yùn)算符

&&:并且
| :或者(可以省略)

正則表達(dá)式-預(yù)定義字符

“.” : 匹配任何字符。
“\d”:任何數(shù)字[0-9]的簡(jiǎn)寫;
“\D”:任何非數(shù)字[^0-9]的簡(jiǎn)寫;
“\s”: 空白字符:[ \t\n\x0B\f\r] 的簡(jiǎn)寫
“\S”: 非空白字符:[^\s] 的簡(jiǎn)寫
“\w”:?jiǎn)卧~字符:[a-zA-Z_0-9]的簡(jiǎn)寫
“\W”:非單詞字符:[^\w]

正則表達(dá)式-數(shù)量詞

x? : 0次或1次
x* : 0次到多次
x+ : 1次或多次
X{n} : 恰好n次
X{n,} : 至少n次
X{n,m}: n到m次(n和m都是包含的,最少n次,最多m次。

二、ip地址匹配

題目要求:使用正則表達(dá)式匹配192.11.23.69
須知:ip地址的范圍為0.0.0.0-255.255.255.255

接下來我們直接進(jìn)入正題吧!在我們看到題目的第一眼,大家可能覺得很簡(jiǎn)單,這不就用\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}

正則匹配ip,正則表達(dá)式這里我們可以看到使用上述表達(dá)式的確匹配成功。

??????雖然完成了我們的題目要求,有些細(xì)心的伙伴會(huì)發(fā)現(xiàn),用紅色標(biāo)注出來的部分,重復(fù)了三遍,是不是我們可以用分組的方式來簡(jiǎn)化表達(dá)式并完成題目要求。我們把上面的匹配表達(dá)式換成分組之后的樣子,即(\d{1,3}\.){3}\d{1,3}
表達(dá)式講解:(\d{1,3}\.) 匹配我們前三段的ip地址和’.‘,因?yàn)榈谒亩蝘p地址最后面不能有’.',如果我們使用在同一個(gè)分組去匹配就會(huì)出現(xiàn)錯(cuò)誤情況,而\d{1,3}剛好匹配我們最后一段ip地址
匹配效果如下:

正則匹配ip,正則表達(dá)式
??????匹配同樣成功,該模式有什么不對(duì)的地方嗎?從語法上看,完全正確,也達(dá)到了我們的題目要求,可是我們有沒有注意到,我們?nèi)粘I钪兴玫膇p地址每一位都是在0-255之間,但是我們上面寫的表達(dá)式會(huì)匹配0-999之間的所有ip地址,如果在未來的工作中,有這樣的需求,要匹配所有合法的ip地址,那么我們上面所寫的正則表達(dá)式是不是就不符合要求了,這里就需要我們使用子表達(dá)式的嵌套(注意:有一點(diǎn)很重要。通過上面的例子,我們發(fā)現(xiàn),寫一個(gè)能夠匹配預(yù)期內(nèi)容的正則表達(dá)式其實(shí)并不難,但是寫一個(gè)能夠考慮到所有可能場(chǎng)景,確保將不需要匹配的內(nèi)容排除在外的正則表達(dá)式就困難多了)
??????所以我將上面的表達(dá)式又改進(jìn)了一下(這里用到了子表達(dá)式的嵌套,如果不懂的小伙伴可以先看一下基本概念再來看接下來的內(nèi)容)。我們發(fā)現(xiàn)當(dāng)ip地址僅有一位或者兩位的時(shí)候(即1.1.1.1 or 11.11.11.11),用(\d{1,2}\.)就可以完成匹配,當(dāng)ip地址為三位的時(shí)候,會(huì)有這么兩種情況(這里留下個(gè)疑問,考慮到初學(xué)者可能犯錯(cuò)的情況)?
1:ip地址開頭為1的時(shí)候,我們后面的兩位每一位的范圍都在0-9之間,而\d這個(gè)元字符剛好滿足了我們的要求,所以使用(1\d{2}.)就滿足了我們?cè)?00-199ip地址的匹配,這個(gè)其實(shí)還相對(duì)簡(jiǎn)單,接下來就是200-255之間ip地址的匹配了,有些同學(xué)可能會(huì)想,我們可以使用匹配100-199的表達(dá)式來實(shí)現(xiàn)對(duì)200-255ip地址的匹配,即(2\d{2}\.)這樣的表達(dá)式來實(shí)現(xiàn),可是這樣會(huì)把256-299之間的ip地址匹配到,違反了我們的意愿,所以我改良了一下表達(dá)式(2[0-5]{2}\.]),這樣就只會(huì)匹配到200-255之間的ip地址,既然子表達(dá)式都寫好了,就讓我們來實(shí)踐看看效果吧!
表達(dá)式為:((1\d{2}.)|(2[0-5]{2}.)|(\d{1,2}.)){3}((\d{1,2})|(1\d{2})|(2[0-5]{2}))),伙伴們可以一起實(shí)踐一下!
正則匹配ip,正則表達(dá)式匹配成功,可是再寫出這個(gè)表達(dá)式,我們要測(cè)試某些特殊情況是否不在我們的匹配范圍內(nèi),于是我發(fā)現(xiàn)了以下兩個(gè)比較重要的問題。

第一種:正則匹配ip,正則表達(dá)式合法ip地址匹配錯(cuò)誤

第二種:
正則匹配ip,正則表達(dá)式
非法ip地址匹配成功

為什么會(huì)出現(xiàn)上面的情況?

當(dāng)我們覺得表達(dá)式很完美的時(shí)候,雖然256超出匹配范圍,但是因?yàn)?\d{1,2}\.)的影響,使得我們的非法表達(dá)式也匹配成功,本來192.11.23.200為合法表達(dá)式,卻只匹配到了98.11.23.200,請(qǐng)大家看我用紅色箭頭標(biāo)注的地方,會(huì)不會(huì)跟我們子表達(dá)式的順序有關(guān)呢?那好,我來改變一下順序,我們將(\d{1,2}\.)放到了最后,防止出現(xiàn)錯(cuò)誤匹配
改變匹配順序后的表達(dá)式為:
( ( (2[0-5]{2}.)|(1\d{2}.)|(\d{1,2}.)){3}((1\d{2})|(2[0-5]{2})|(\d{1,2})))
正則匹配ip,正則表達(dá)式果然,第一種情況我們是因?yàn)樽颖磉_(dá)式順序的原因,導(dǎo)致匹配錯(cuò)誤。

可是第二種情況使用改變順序的表達(dá)式,依然會(huì)出現(xiàn)以上問題(這里也就印證了上文提到的那些話,要想寫出一個(gè)符合規(guī)范的表達(dá)式就很困難)。

正則匹配ip,正則表達(dá)式于是這里的^就起到了作用,我們可以把第一個(gè)子表達(dá)式單另拉出來加上^表示第一段ip地址開頭為(\d{1,2}),這樣剛好避免了我們?nèi)缟系那闆r,效果如下:
正則匹配ip,正則表達(dá)式可以看到非法ip不在我們的匹配當(dāng)中。

其實(shí)寫到這里大家是不是感覺已經(jīng)大功告成了?回答:No
(2[0-5]{2})這個(gè)表達(dá)式能否匹配239這個(gè)ip呢?不知道有沒有細(xì)心的小伙伴發(fā)現(xiàn)
所以最終正確的表達(dá)式應(yīng)該為:
(^((2[0-4]\d.)|(25[0-5].)|(1\d{2}.)|(\d{1,2}.))((2[0-5]{2}.)|(1\d{2}.)|(\d{1,2}.){2})((1\d{2})|(2[0-5]{2})|(\d{1,2})))

在這里可以跟大家說一下,是否可以使用$來避免我們上述第一種問題,有興趣的可以嘗試一下,到這里,我們這道題目也算基本符合規(guī)范的完成了,還有什么問題可以私下交流!文章來源地址http://www.zghlxwxcb.cn/news/detail-797091.html

到了這里,關(guān)于正則表達(dá)式之ip地址匹配(詳細(xì)講解)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 正則表達(dá)式的神奇世界:表達(dá)、匹配和提取

    正則表達(dá)式,這個(gè)看起來像密林中的迷宮的工具,既神秘又令人著迷。它是編程世界中的一門魔法,有著神奇的能力。你是否曾經(jīng)在尋找或解析文本時(shí)感到束手無策?或許你想要從海量數(shù)據(jù)中提取特定信息?這正是正則表達(dá)式可以派上用場(chǎng)的時(shí)候。本文將帶你探索這個(gè)神奇的

    2024年02月07日
    瀏覽(35)
  • VSCode 正則表達(dá)式 匹配多行

    VSCode 正則表達(dá)式 匹配多行

    VS Code 正則表達(dá)式匹配多行 (.|n)*? 案例1: str(.|n)*?, 案例2: const(.|n)*?}$ 案例3: fn(.|n)*?},

    2024年02月02日
    瀏覽(21)
  • 【動(dòng)態(tài)規(guī)劃】通配符匹配與正則表達(dá)式匹配

    【動(dòng)態(tài)規(guī)劃】通配符匹配與正則表達(dá)式匹配

    題目描述: 給你一個(gè)輸入字符串 (s) 和一個(gè)字符模式 § ,請(qǐng)你實(shí)現(xiàn)一個(gè)支持 ‘?’ 和 ‘*’ 匹配規(guī)則的通配符匹配: ‘?’ 可以匹配任何單個(gè)字符。 ‘*’ 可以匹配任意字符序列(包括空字符序列)。 判定匹配成功的充要條件是:字符模式必須能夠 完全匹配 輸入字符串(而

    2024年02月07日
    瀏覽(36)
  • 正則表達(dá)式的匹配(py編程)

    1. 匹配單個(gè)字符 在上一小節(jié)中,了解到通過re模塊能夠完成使用正則表達(dá)式來匹配字符串 本小節(jié),將要講解正則表達(dá)式的單字符匹配 代碼 功能 . 匹配任意1個(gè)字符(除了n) [ ] 匹配[ ]中列舉的字符 d 匹配數(shù)字,即0-9 D 匹配非數(shù)字,即不是數(shù)字 s 匹配空白,即 空格,tab鍵

    2024年02月02日
    瀏覽(23)
  • 劍指 Offer 19. 正則表達(dá)式匹配

    劍指 Offer 19. 正則表達(dá)式匹配 初始化要考慮主串為空字符串,模式串為 a*b*c* 的形式。 一般情況時(shí),根據(jù)模式串是 普通字符 、 \\\'.\\\' 、 \\\'*\\\' 分情況考慮。為 \\\'*\\\' 時(shí),考慮 匹配0次 和 匹配多次 的情況,匹配多次時(shí)要注意判斷前提是能匹配。

    2024年02月09日
    瀏覽(25)
  • 詳解正則表達(dá)式匹配方法 match()

    詳解正則表達(dá)式匹配方法 match()

    在前端開發(fā)中,正則表達(dá)式是一大利器。所以我們這次就來討論下match()方法。 match本身是JavaScript語言中字符串對(duì)象的一個(gè)方法,該方法的簽名是 match([string] | [RegExp]) 它的參數(shù)既可以是一個(gè)字符串,也可以是一個(gè)正則表達(dá)式。該方法絕大多數(shù)都是要使用正則表達(dá)式的,所以參

    2024年02月11日
    瀏覽(19)
  • 正則表達(dá)式包含數(shù)字和字符匹配

    正則表達(dá)式包含數(shù)字和字符匹配

    至少6位。 pattern : (?=. [0-9])(?=. [A-Za-z])[0-9A-Za-z]{6,} 正則表達(dá)式中的“?=”是一個(gè)正向預(yù)查字符,它的意思是匹配前一個(gè)字符出現(xiàn)的最少一次。具體來說,當(dāng)一個(gè)匹配出現(xiàn)時(shí),它會(huì)檢查前一個(gè)字符是否符合要求,如果符合,則繼續(xù)匹配下一個(gè)字符,否則停止匹配。

    2024年02月06日
    瀏覽(34)
  • 【編譯原理】【詞法分析】【正則表達(dá)式】【NFA】【DFA】【C++】正則表達(dá)式轉(zhuǎn)DFA&NFA,判斷字符串是否符合正則表達(dá)式的匹配算法

    【編譯原理】【詞法分析】【正則表達(dá)式】【NFA】【DFA】【C++】正則表達(dá)式轉(zhuǎn)DFA&NFA,判斷字符串是否符合正則表達(dá)式的匹配算法

    顯然,正則表達(dá)式、NFA、DFA的概念都很簡(jiǎn)單,所以直接上代碼,注釋應(yīng)該解釋地比較清楚, 沒有萬能頭文件的自行替換需求庫 ,如果有疑問的可以留言。 網(wǎng)盤鏈接 [自行補(bǔ)全]/s/1pbGT_wpB662TwFrnukXgGQ?pwd=TSIT 提取碼:TSIT 原理可以參考這篇博客 傳送門 本次程序由四個(gè)文件組成 文

    2024年02月11日
    瀏覽(35)
  • hive中使用正則表達(dá)式匹配數(shù)字
  • 探索LeetCode【0010】正則表達(dá)式匹配(未懂)

    探索LeetCode【0010】正則表達(dá)式匹配(未懂)

    題目鏈接:【0010】正則表達(dá)式匹配 給你一個(gè)字符串 s 和一個(gè)字符規(guī)律 p ,請(qǐng)你來實(shí)現(xiàn)一個(gè)支持 \\\'.\\\' 和 \\\'*\\\' 的正則表達(dá)式匹配。 \\\'.\\\' 匹配任意單個(gè)字符 \\\'*\\\' 匹配零個(gè)或多個(gè)前面的那一個(gè)元素 所謂匹配,是要涵蓋 整個(gè) 字符串 s 的,而不是部分字符串。 示例 1: 示例 2: 示例 3: 提

    2024年02月05日
    瀏覽(19)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包