正則表達式IP地址合法性判斷實戰(zhàn)記錄
一、正則表達式常見匹配字符快速回顧
符號 | 描述 |
---|---|
. | 匹配處換行符\n之外任意1個字符 |
[] | 匹配[]中任意一個 |
\d | 一個0-9數(shù)字 |
\D | 匹配非數(shù)字 |
\w | 匹配單詞字符:a-z、A-Z、0-9 |
\W | 匹配非單詞字符 |
\s | 匹配空格、tab健 |
\S | 匹配非空格,tab健 |
常用的匹配規(guī)則-匹配字符數(shù)量
匹配前一個字符出現(xiàn)0次或者無數(shù)次
匹配前一個字符出現(xiàn)1次或者無數(shù)次
符號 | 描述 |
---|---|
? | 匹配前一個字符出現(xiàn)0次或者1次 |
{m} | 匹配前一個字符出現(xiàn)m次 |
{m,} | 匹配前一個字符出現(xiàn)至少m次 |
{n,m} | 匹配前一個字符出現(xiàn)n-m次 |
^ | 匹配字符串開頭 |
$ | 匹配字符串結(jié)尾 |
| | 或 |
(ab) | 將括號中字符作為一個分組 |
二、 實戰(zhàn):正則表達式判斷IPv4地址合法性
python正則表達式處理re.match()函數(shù),可以對字符進行匹配,查找的位置是從指定的位置開始一直往后找,返回第一個符合規(guī)則的對象,如果開始位置不符合匹配隊形則返回None。而如果從起始位置開始沒有匹配成功,即便其他部分包含需要匹配的內(nèi)容,re.match()也會返回None。
忘記的同學可以去看上篇文章講解
問題:假設有一個IP地址,如ip = ‘10.10.10.10’,如何檢測IPV4的IP地址格式是否正確?
分析
IPV4地址分四段,分別為:(1-255).(0-255).(0-255).(0-255)
第一段分析,有以下5種情況:
1-9 1位數(shù),由于是第一段,因此不能取0,1-9任意取 10-99 1開頭兩位數(shù),個位數(shù)0-9任意取 100-199 1開頭三位數(shù),十位數(shù)和個位數(shù)0-9任意取 200-249 2開頭三位數(shù),當十位數(shù)為0-4時(即250以內(nèi)),個位數(shù)0-9任意取 250-255 2開頭三位數(shù),當十位數(shù)為5時(大于等于250),個位數(shù)只能取0-5 這五種情況對應的正則如下:
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] 組合起來就是:
[1-9]|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]
加個小括號組合起來:
([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開頭兩位數(shù),個位數(shù)0-9任意取 100-199 1開頭三位數(shù),十位數(shù)和個位數(shù)0-9任意取 200-249 2開頭三位數(shù),當十位數(shù)為0-4時(即250以內(nèi)),個位數(shù)0-9任意取 250-255 2開頭三位數(shù),當十位數(shù)為5時(大于等于250),個位數(shù)只能取0-5 這五種情況對應的正則如下:
0-9 \d 10-99 [1-9]\d 100-199 1\d\d 200-249 2[0-4]\d 250-255 25[0-5] 組合起來就是
\d|\[1-9]\d|1\d\d|2[0-4]\d|25[0-5]
第四段最后需要加上結(jié)尾符號:$。表示終止匹配。
最終結(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é)
到此這篇關于正則表達式IP地址合法性判斷的文章就介紹到這了,更多相關正則表達式IP地址合法性判斷內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!