使用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+ 浏览量

启动您的职业生涯

通过完成课程获得认证

开始学习
广告