正則表達(dá)式IP地址合法性判斷實(shí)戰(zhàn)記錄
一、正則表達(dá)式常見(jiàn)匹配字符快速回顧
符號(hào) | 描述 |
---|---|
. | 匹配處換行符\n之外任意1個(gè)字符 |
[] | 匹配[]中任意一個(gè) |
\d | 一個(gè)0-9數(shù)字 |
\D | 匹配非數(shù)字 |
\w | 匹配單詞字符:a-z、A-Z、0-9 |
\W | 匹配非單詞字符 |
\s | 匹配空格、tab健 |
\S | 匹配非空格,tab健 |
常用的匹配規(guī)則-匹配字符數(shù)量
匹配前一個(gè)字符出現(xiàn)0次或者無(wú)數(shù)次
匹配前一個(gè)字符出現(xiàn)1次或者無(wú)數(shù)次
符號(hào) | 描述 |
---|---|
? | 匹配前一個(gè)字符出現(xiàn)0次或者1次 |
{m} | 匹配前一個(gè)字符出現(xiàn)m次 |
{m,} | 匹配前一個(gè)字符出現(xiàn)至少m次 |
{n,m} | 匹配前一個(gè)字符出現(xiàn)n-m次 |
^ | 匹配字符串開(kāi)頭 |
$ | 匹配字符串結(jié)尾 |
| | 或 |
(ab) | 將括號(hào)中字符作為一個(gè)分組 |
二、 實(shí)戰(zhàn):正則表達(dá)式判斷IPv4地址合法性
python正則表達(dá)式處理re.match()函數(shù),可以對(duì)字符進(jìn)行匹配,查找的位置是從指定的位置開(kāi)始一直往后找,返回第一個(gè)符合規(guī)則的對(duì)象,如果開(kāi)始位置不符合匹配隊(duì)形則返回None。而如果從起始位置開(kāi)始沒(méi)有匹配成功,即便其他部分包含需要匹配的內(nèi)容,re.match()也會(huì)返回None。
忘記的同學(xué)可以去看上篇文章講解
問(wèn)題:假設(shè)有一個(gè)IP地址,如ip = ‘10.10.10.10’,如何檢測(cè)IPV4的IP地址格式是否正確?
分析
IPV4地址分四段,分別為:(1-255).(0-255).(0-255).(0-255)
第一段分析,有以下5種情況:
1-9 1位數(shù),由于是第一段,因此不能取0,1-9任意取 10-99 1開(kāi)頭兩位數(shù),個(gè)位數(shù)0-9任意取 100-199 1開(kāi)頭三位數(shù),十位數(shù)和個(gè)位數(shù)0-9任意取 200-249 2開(kāi)頭三位數(shù),當(dāng)十位數(shù)為0-4時(shí)(即250以?xún)?nèi)),個(gè)位數(shù)0-9任意取 250-255 2開(kāi)頭三位數(shù),當(dāng)十位數(shù)為5時(shí)(大于等于250),個(gè)位數(shù)只能取0-5 這五種情況對(duì)應(yīng)的正則如下:
1-9 [1-9] 10-99 [1-9]\d 100-199 1\d\d 200-249 2[0-4]\d 250-255 25[0-5] 組合起來(lái)就是:
[1-9]|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]
加個(gè)小括號(hào)組合起來(lái):
([1-9]|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])
后三段情況均一樣,有以下5中情況:
0-9 1位數(shù),0-9任意取,唯一與第一段有區(qū)別的地方 10-99 1開(kāi)頭兩位數(shù),個(gè)位數(shù)0-9任意取 100-199 1開(kāi)頭三位數(shù),十位數(shù)和個(gè)位數(shù)0-9任意取 200-249 2開(kāi)頭三位數(shù),當(dāng)十位數(shù)為0-4時(shí)(即250以?xún)?nèi)),個(gè)位數(shù)0-9任意取 250-255 2開(kāi)頭三位數(shù),當(dāng)十位數(shù)為5時(shí)(大于等于250),個(gè)位數(shù)只能取0-5 這五種情況對(duì)應(yīng)的正則如下:
0-9 \d 10-99 [1-9]\d 100-199 1\d\d 200-249 2[0-4]\d 250-255 25[0-5] 組合起來(lái)就是
\d|\[1-9]\d|1\d\d|2[0-4]\d|25[0-5]
第四段最后需要加上結(jié)尾符號(hào):$。表示終止匹配。
最終結(jié)果:
import re ip1 = '100.10.10.253' print(re.match(r'([1-9]|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]).(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]).(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]).(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])$',ip1)) *******************print********************************* <re.Match object; span=(0, 13), match='100.10.10.253'> ip2 = '0.10.10.253' print(re.match(r'([1-9]|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]).(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]).(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]).(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])$',ip2)) *******************print********************************* None
總結(jié)
到此這篇關(guān)于正則表達(dá)式IP地址合法性判斷的文章就介紹到這了,更多相關(guān)正則表達(dá)式IP地址合法性判斷內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
js通過(guò)正則匹配沒(méi)有內(nèi)容的空標(biāo)簽
這篇文章主要介紹了js通過(guò)正則匹配沒(méi)有內(nèi)容的空標(biāo)簽,需要的朋友可以參考下2020-02-02Android中手機(jī)號(hào)、車(chē)牌號(hào)正則表達(dá)式大全
這篇文章主要介紹了Android中手機(jī)號(hào)、車(chē)牌號(hào)正則表達(dá)式的相關(guān)資料,需要的朋友可以參考下2015-09-09