使用正則表示式在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”。

更新於:2021年2月5日

2000+ 次瀏覽

啟動您的職業生涯

完成課程後獲得認證

開始學習
廣告