簡體   English   中英

如何使用給定字符串中的正則表達式匹配IP地址?

[英]How to match the ip address using regular expression from the given string?

假設我有以下字符串:

設置一個{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. 那是使用regexp匹配第二個IP的任何簡單格式嗎?

  2. 例如,讓我們考慮一個字符串中我有100個IP地址,如何使用正則表達式從該字符串中匹配第10個IP地址

嘗試

% 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地址在列表中出現兩次,從而使刪除所需的地址變得更加困難。

您是否只想檢查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)))?)}]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM