使用C++中的正則表示式模式驗證IPv6地址


給定一個IP地址,任務是驗證此IP地址,並藉助正則表示式(正則表示式)檢查它是否為IPv6。如果IP地址有效,則列印“IPv6地址”,否則列印“無效”。

有效的IPv4地址是形式為"XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX"的IP,其中每個Xi位都是十六進位制數字。例如,

輸入-1

IP= “3001:0da8:82a3:0:0:8B2E:0270:7224”

輸出

“Not”

解釋 − 這不是有效的IPv6地址,返回“無效”。

輸入-2

IP= “2001:0db8:85a3:0000:0000:8a2e:0370:7334”

輸出

“IPv6”

解釋 − 這是一個有效的IPv6地址,返回“IPv6”。

解決此問題的方案

要檢查給定的IP地址是否為IPv6,我們使用正則表示式。正則表示式是一個包含一系列字元的表示式,這些字元定義特定的模式。這些模式可用於演算法中以匹配字串中的模式。它也廣泛用於輸入驗證。

範圍規範 − 我們可以使用最簡單的方法指定字元以建立模式。要使用字元指定範圍,我們可以使用“[ ]”括號。

指定字元 − 上述表示式表示一個左括號和一個範圍為a到z,'A'到'Z'和'0'到'9'的數字作為正則表示式。

[a-z], [A-Z] and [0-9].

重複模式 − 表示式修飾符可以是“+”,表示匹配一個或多個模式的出現,也可以是“*”,表示匹配零個或多個模式的出現。

表示式[a-z]*將匹配空字串。

如果要指定一組字元以匹配一次或多次,則可以使用括號,如下所示:

[Abc]+

以下是解決此問題的方案

  • 輸入一個指定IP地址的字串。

  • 字串函式validIPAddress(string IP)以IP地址作為輸入,並檢查輸入字串是否有效。如果有效,則返回“IPv6”,否則返回“無效的IP地址”。

  • 為IPv6地址建立一個正則表示式模式。由於IPv6地址包含8個欄位,每個欄位包含表示為十六進位制的數值位。IPv6地址看起來像XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX,由“冒號”分隔。

  • 有效的IPv6地址可能在(([0-9a-fA-F]){1,4})\:){7}([0-9a-fA-F]){1,4})範圍內,其中第一個數字的範圍為0-9,第二個是十六進位制字母數字。

  • 同樣,對於第二個欄位,第一個字元的範圍將為0-9a-fA-F,因此正則表示式模式將為'[0-9a-fA-F]'

示例

#include<bits/stdc++.h>
using namespace std;
string validIPAddress(string IP) {
   regex ipv6("((([0-9a-fA-F]){1,4})\:){7}([0-9a-fA-F]){1,4}");
   if(regex_match(IP, ipv6))
      return "IPv6";
   else
      return "Not";
}
int main(){
   string IP= “3001:0da8:82a3:0:0:8B2E:0270:7224”;
   string ans= validIPAddress(IP);
   cout<<ans<<endl;
   return 0;
}

輸出

執行上述程式碼將生成以下輸出:

Not

由於輸入的IP地址不是有效的IP地址,我們將返回“無效”。

更新於:2021年2月5日

2K+ 瀏覽量

啟動您的職業生涯

透過完成課程獲得認證

開始學習
廣告
© . All rights reserved.