使用C ++中的ReGex模式验证IPv6地址
给定一个IP地址,任务是验证该IP地址并借助来检查它是否为IPv6ReGex(RegularExpression)。如果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地址,返回“Not”。
输入-2-
IP= “2001:0db8:85a3:0000:0000:8a2e:0370:7334”
输出-
“IPv6”
说明-这是有效的IPv6地址,返回“IPv6”。
解决这个问题的方法
要检查给定的IP地址是否为IPv6,我们使用ReGex。ReGex是一种表达式,其中包含定义特定模式的一系列字符。这些模式可用于算法中以匹配字符串中的模式。它还广泛用于输入验证。
范围指定-我们可以指定字符以最简单的方式制作图案。要使用字符指定范围,可以使用“[]”括号。
指定字符-上面的表达式用正则表达式表示开括号和a到z,'A'到'Z'以及'0'到'9'范围内的数字。
[a-z], [A-Z] and [0-9].
重复模式-表达式修饰符可以是“+”,表示匹配某个模式的出现一次或多次,也可以是“*”,表示匹配某个模式的出现零次或多次。
表达式[az]*将匹配空白字符串。
如果要指定一组字符以匹配一次或多次,则可以使用括号,如下所示:
[Abc]+
以下是解决此问题的方法
输入指定一个IP地址的字符串。
字符串函数validIPAddress(stringIP)将IP地址作为输入,并检查输入的字符串是否有效。如果有效,则返回“IPv6”,否则返回“NotaIPAddress”。
为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地址,因此我们将返回“Not”。