使用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地址,我們將返回“無效”。
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP