linux c 判断字符串是否为ip地址
发布网友
发布时间:2022-05-01 18:04
我来回答
共3个回答
热心网友
时间:2022-06-20 19:45
一般地可以通过正则表达式库进行检测
也可以手动进行检测
常见的ip地址是点分十进制的字符串形式
类似
192.168.1.1
10.2.4.1
这种
四个部分每个部分的最大值是255
所以正则表达式简单点可以是
(\d+\.){3}\d+
但这样并不能完全正确地匹配ip地址
如果所要匹配的文件中确定出现的类似字符串为ip地址的话就完全没有问题
准确点可以
(\d{1,3}\.){3}\d{1,3}
然后再对每个数字进行判断
判断是否超出了ip地址的范围
下面是一个简单的使用正则表达式的代码
#include <stdio.h>
#include <string.h>
#include <pcre.h>
int main(int argc,char **argv)
{
char *s="192.168.1.1";
pcre *code;
int rc;
int ovector[2*3];
const char *errptr;
const char *ip;
int erroffet;
char *p;
char buf[20];
code=pcre_compile("(\\d{1,3}\\.){3}\\d{1,3}",0,
&errptr,&erroffet,NULL);
if((rc=pcre_exec(code,NULL,s,strlen(s),0,0,ovector,2*3)) > 0)
{
pcre_get_substring(s,ovector,rc,0,&ip);
snprintf(buf,20,"%s",ip);
pcre_free_substring(ip);
for(p=strtok(buf,".");p != NULL;p=strtok(NULL,"."))
{
if(atoi(p) > 255)
goto end;
}
printf("正确ip!\n");
return 0;
}
end:
printf("错误的ip!\n");
pcre_free(code);
return 0;
}
热心网友
时间:2022-06-20 19:45
rep='\d{1,2}|1\d\d|2[0-4]\d|25[0-5]'
x=/^(#{rep})\.(#{rep})\.(#{rep})\.(#{rep})$/
p "ok!" if strTestIP =~ x
热心网友
时间:2022-06-20 19:46
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <errno.h>
int if_a_string_is_a_valid_ipv4_address(const char *str)
{
struct in_addr addr;
int ret;
volatile int local_errno;
errno = 0;
ret = inet_pton(AF_INET, str, &addr);
local_errno = errno;
if (ret > 0)
fprintf(stderr, "\"%s\" is a valid IPv4 address\n", str);
else if (ret < 0)
fprintf(stderr, "EAFNOSUPPORT: %s\n", strerror(local_errno));
else
fprintf(stderr, "\"%s\" is not a valid IPv4 address\n", str);
return ret;
}