2013-10-24 72 views
0

我們考慮我有follwing字符串:如何使用給定字符串的正則表達式匹配ip地址?

設置{} example192.168.0.1example10.0.0.1example172.16.0.1

從上面的字符串我想匹配的10.0。 0.1使用正則表達式?

的第一個IP,我們可以通過regexp {.*?(\d+\.\d+\.\d+\.\d+)} $a match sub1

做把$ SUB1 = 192.168.0.1

的最後一個IP,我們可以通過regexp {.*?(\d+\.\d+\.\d+\.\d+)$} $a match sub1

做卻將$ SUB1 = 172.16.0.1

爲第二ip我們可以通過regexp {.*?(\d+\.\d+\.\d+\.\d+).*?(\d+\.\d+\.\d+\.\d+)} $a match sub1 sub2

提出SUB2 $ = 10.0.0.1

  1. 是,使用正則表達式的任何簡單格式賽第二IP?

  2. 例如,讓我們考慮一個字符串我有100個IP地址,從這個字符串我怎樣才能第十IP地址使用正則表達式

+0

去你喜歡的搜索引擎,並做了「IP地址正則表達式」的搜索,你會得到數百,甚至數千,變種,其中最受歡迎的將是非常好的。 –

回答

1

匹配嘗試

% set a {example192.168.0.1example10.0.0.1example172.16.0.1} 
example192.168.0.1example10.0.0.1example172.16.0.1 
% set ipAddrs [regexp -inline -all {\d+\.\d+\.\d+\.\d+} $a] 
192.168.0.1 10.0.0.1 172.16.0.1 
% set ipAddr [lindex $ipAddrs 1] 
10.0.0.1 

注意Tcl列出了從0開始的索引,因此要獲得假設示例中的第10個IP地址,您需要[lindex $ipAddrs 9]

此外,我已經刪除了前導.*?和正則表達式模式中的括號。似乎沒有必要明確地匹配主要的非IP地址文本,並且括號導致每個IP地址在列表中出現兩次,使得難以移除期望的地址。

+0

'謝謝..很好' – velpandian

0

你想只檢查IP4地址或IPV6嗎?在這種情況下,正則表達式將是瘋狂的長,看起來像這樣:

[list {(((25[0-5])|(2[0-4]\d)|(1\d\d)|(0?\d?\d))\.((25[0-5])|(2[0-4]\d)|(1\d\d)|(0?\d?\d))\.((25[0-5])|(2[0-4]\d)|(1\d\d)|(0?\d?\d))\.((25[0-5])|(2[0-4]\d)|(1\d\d)|(0?\d?\d))(/((3[0-2])|([1-2]?\d)))?)} \ 
         {(((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(%.+)?(/((12[0-8])|(1[0-1]\d)|(0?\d?\d)))?)}]