问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

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;
}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
逆水寒手游庄园怎么邀请好友同住 逆水寒手游 逆水寒不同区可以一起组队吗? 逆水寒手游 逆水寒怎么进入好友世界? 逆水寒手游 逆水寒怎么去别人的庄园? 使用puppeteer实现将htmll转成pdf 内卷时代下的前端技术-使用JavaScript在浏览器中生成PDF文档 【译】将HTML转为PDF的几种实现方案 变形金刚08动画怎么样 变形金刚08动画的问题 变形金刚08动画日语版剧情介绍 聂小倩出自哪部作品哪个地方? linux 通过键盘输入一批字符串 对输入的字符串进行测试,判断是否为文... awk 如何判断截取的某一个字符串为空 shell怎么判断string不为空 linux 中 if [ &quot;x${var}&quot; = &quot;x&quot; ] 什么意思 《聊斋志异》聂小倩是鬼还是狐妖? linux 判断输出为空的问题 shell里面怎么判断字符串是否为空 谁有雨后的故事发给我。谢谢 求雨后 姐弟的 小故事 全集123部 要全 高清文字 雨后的故事用手机怎么下载 雨后的故事下载 跪求雨后(1982)张先衡主演的免费的百度云资源链接地址 经常编排world文档,一行中有并列的两张图片,分别添加题注后两张图片就分开了,怎么解决? 用word2007,文章中插入照片,并写上题注,怎样才能将照片与题注组合成一体? 藏族八宝图的意义 吉祥八宝的莲花 印度斯坦族的文明 八角莲爱情象征着什么? 为什么一些人喜欢穿「鼻环」? shell中如何判定一个字符串里是否有空格? 聂小倩(杨幂版)每集介绍 shell 字符串拆分 判断是否有空格 linux 怎样用脚本或命令查找两个固定字符串A和B 中的字符串C,注意字符串C可能为空,找到后把C替换成D 宝宝取啥名字好听男孩姓刘? 做了激光祛斑,结果痂掉了以后开始反黑了,怎么办? 激光祛斑掉痂以后还是黑色斑正常吗 药水去雀斑掉痂后反黑了怎么办 祛斑后反黑30天能好吗 2021年山东省淄博市张店区养老保险和养老保险一档应交多少钱?_百度问一问 山东省淄博市养老保险缴费基数6243退休后开多少钱 淄博市社会养老保险最低交多少钱我在个企 淄博市养老保险基数 淄博市养老保险比例 2019年淄博养老保险缴费基数 执业药师考后审核不通过怎么办 执业药师考试通过后没有进行考后审核有什么后果? 回收站清空了还能找回来吗,我win10? 执业药师考试成绩马上出来,考后审核严吗?如何顺利通过考核? 执业药师考后审核严吗