使用正则表达式在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”和“[email protected]”是无效的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+ 次浏览

启动您的职业生涯

完成课程后获得认证

开始学习
广告