2015-06-23 49 views
0

對於IPv4地址範圍如169.254.0.0/16或192.168.0.0/16,可以直接爲每個地址構造一個正則表達式,因爲一旦您完全匹配前6位數字,完成。用於IPv4地址範圍的正則表達式

但是關於在寬鬆的保留範圍內的任何地址匹配什麼如

100.64.0.0 – 
100.127.255.255 

100\.開頭的正則表達式是不夠的,因爲這裏將是100.64和100.127範圍之外的數字(例如100.65。 0.0,100.127.255.256)將被錯誤地匹配。如何最好地捕獲這樣的範圍而不必明確定義每個範圍內的每個有效子範圍?該語言是Python。

作爲參考,可以找到完整的保留IP地址和範圍列表here

+0

欺騙? http://stackoverflow.com/questions/106179/regular-expression-to-match-dns-hostname-or-ip-address –

+3

爲什麼你不使用IP地址庫? https://docs.python.org/3/library/ipaddress.html或https://pypi.python.org/pypi/py2-ipaddress/ – TessellatingHeckler

+0

@TessellatingHeckler,因爲ipaddress.ip_address只會告訴我一個地址是有效的。它不幫我檢測保留的IP地址。 – Pyderman

回答

3

使用IPv4解析庫是首選。如果您在使用正則表達式堅持,

re.search('^(100\.(6[4-9]|[7-9]\d|1[0-1]\d|12[0-7])(\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])){2})$', text)

你可以看到,我的分別搜索:

  • 64-69(6[4-9]
  • 70-99([7-9]\d
  • 100-119(1[0-1]\d
  • 120-127(12[0-7]

  • 0-9(\d
  • 10-99([1-9]\d
  • 100-199(1\d\d
  • 200-249(2[0-4]\d
  • 250- 255(25[0-5]
0

這是做這件事:

import re 

print re.findall(r'\d+\.\S+\d', 'fdgsdfg 100.127.255.255 ggffgsdf 100.64.0.0 asdffsdf') 

輸出:

['100.127.255.255', '100.64.0.0'] 
+1

That doesn如果100.147.255.255位於100.64.0.0/10子網內,則不回答。 – TessellatingHeckler

+0

你是什麼意思? –

+0

@TessellatingHeckler你是什麼意思? –