使用正則表示式在C++中驗證IPv4地址
給定一個IP地址,任務是驗證此IP地址並檢查它是否為IPv4地址,方法是使用正則表示式(Regular Expression)。如果IP地址有效,則列印“IPv4地址”,否則列印“無效”。
有效的IPv4地址是“X1.X2.X3.X4”形式的IP,其中0 <= Xi <= 255,並且Xi不能包含前導零。例如,“192.168.1.1”和“192.168.1.0”是有效的IPv4地址,但“192.168.01.1”、“192.168.1.00”和“192.168@1.1”是無效的IPv4地址。例如:
輸入-1 −
IP= “172.15.254.2”
輸出 −
“IPv4”
說明 −這是一個有效的IPv4地址,返回“IPv4”。
輸入-2 −
IP= “312.25.12.1”
輸出 −
“Not”
說明 −這不是一個有效的IPv4地址,返回“無效”。
解決此問題的方法
為了檢查給定的IP地址是否為IPv4地址,我們使用正則表示式。正則表示式是一個包含定義特定模式的字元序列的表示式。這些模式可用於演算法中以匹配字串中的模式。它也廣泛用於輸入驗證。
範圍規範 −我們可以透過最簡單的方式指定字元來建立模式。要使用字元指定範圍,我們可以使用“[ ]”括號。
指定字元 −上述表示式表示一個左括號和一個範圍為a到z,‘A’到‘Z’,以及‘0’到‘9’的數字作為正則表示式。[a-z],[A-Z]和[0-9]。
重複模式 −表示式修飾符可以是“+”,表示匹配一個或多個模式的出現,也可以是“*”,表示匹配零個或多個模式的出現。
表示式[a-z]*將匹配空字串。
如果要指定一組字元以匹配一次或多次,則可以使用括號,如下所示:
[Abc]+
以下是解決此問題的方法:
輸入一個指定IP地址的字串。
字串函式validIPAddress(string IP)接受IP地址作為輸入,並檢查輸入字串是否有效。如果有效,則返回“IPv4”,否則返回“無效的IP地址”。
為IPv4地址建立一個正則表示式模式。由於IPv4地址包含4個欄位,每個欄位的值都在0-255範圍內。IPv4地址看起來像XXX.XXX.XXX.XXX。
有效的IPv4地址可能在(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}範圍內,其中第一位數字的範圍為0-9,第二位為1-9,第三位數字的範圍為0-9。
類似地,對於第二個欄位,第一個字元的範圍為100-199,因此正則表示式模式將是‘1[0-9][0-9]’
對於下一個欄位,數字的範圍為200-249。因此,正則表示式模式將是‘2[0-4][0-9]’,這確保了範圍不會超過255。
最後一個欄位包含範圍為250-255的數字,因此正則表示式模式將是25[0-5]。
示例
#include<bits/stdc++.h> using namespace std; string validIPAddress(string IP) { regex ipv4("(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}([0- 9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])"); if(regex_match(IP, ipv4)) return "IPv4"; else return "Not"; } int main(){ string IP= “172.16.254.1”; string ans= validIPAddress(IP); cout<<ans<<endl; return 0; }
輸出
執行以上程式碼將生成以下輸出:
IPv4
由於輸入的IP地址是一個有效的IP地址,我們將返回“IPv4”。