^:匹配字符串的开头。
(:开始一个分组。
(:开始一个分组。
[01]?[0-9]?[0-9]:匹配0到3位数字,可以是01开头的数字(如01、02、03等),也可以是普通的0到9的数字。
|:表示或者。
2[0-4][0-9]:匹配200到249之间的数字。
|:表示或者。
25[0-5]:匹配250到255之间的数字。
):结束分组。
\\.:匹配一个点号字符(注意需要转义)。
):结束分组。
{3}:重复匹配前面的分组3次,即匹配三段由数字和点号组成的字符串。
[01]?[0-9]?[0-9]:匹配0到3位数字,可以是01开头的数字(如01、02、03等),也可以是普通的0到9的数字。
|:表示或者。
2[0-4][0-9]:匹配200到249之间的数字。
|:表示或者。
25[0-5]:匹配250到255之间的数字。
$:匹配字符串的结尾。
因此,整个正则表达式的含义是:匹配由四段数字和点号组成的字符串,每一段数字的范围为0到255,且字符串的开头和结尾不能有其他字符。这符合 IPv4 地址的格式规范。
也可以这么写:
std::regex ipv4_regex("^((\\d{1,2}|1\\d{2}|2[0-4]\\d|25[0-5])\\.){3}(\\d{1,2}|1\\d{2}|2[0-4]\\d|25[0-5])$");
^:匹配字符串的开头。
(:开始一个分组。
\\d{1,2}|1\\d{2}|2[0-4]\\d|25[0-5]:匹配一个数字段,可以是0-255之间的数字。这里的 \\d{1,2} 表示匹配 1 到 2 位数字,1\\d{2} 表示匹配 100 到 199 之间的数字,2[0-4]\\d 表示匹配 200 到 249 之间的数字,25[0-5] 表示匹配 250 到 255 之间的数字。
\\.:匹配一个点号字符(需要转义)。
):结束分组。
{3}:重复匹配前面的分组 3 次,即匹配三段由数字和点号组成的字符串。
(\\d{1,2}|1\\d{2}|2[0-4]\\d|25[0-5]):匹配第四段数字,可以是 0-255 之间的数字。
$:匹配字符串的结尾。
本函数的功能是校验IP地址的合法性,减少IP地址输入错误,或者读取
错误的IP地址。本函数能够大体上检测出IP地址的合法性,程序对“[”、
“]”和空格进行了处理,其他暂时没有处理,有兴趣的可以自己添加。
程序在Red Hat Enterprise 5.5系统上调试通过。程序中可能有一些
不太规范或者存在bug的地方,还请多多指出,欢迎技术交流
作者:cuizong007@163.com
if ! echo ${ip} |grep -o '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}' &> /dev/null;then
echo "ERROR:${ip}不合法!!!" && exit 1
返回值为0 表示 对指定的协议来说 网络地址不是有效的的
返回值为-1 表示 地址族不是有效的 即af是无效值
所以 我们可以根据返回值判定是否是合法的ipv4或ipv6地址
代码如下: