【字符串解析】IP地址字段解析提取函数接口

  在嵌入式业务逻辑中,我们有时需要从配置文件、串口或者服务端接收的消息数据中进行字符串解析,来提取需要的目标字符串字段。通常我们会调用字符串处理相关的函数,例如strstr,strchr,sscanf等,再结合指针偏移来提取目标字段。实现这种方式的前提是,我们需要提前知道字符串固定的格式内容,如果待解析的字符串内容或者格式偏差的情况,那么我们编写好的字符串解析处理程序就不太适用了。以下是一个通用的对于从字符串中解析IP地址的函数接口,只要字符串中有完整的IP地址字段就会被提取出来。以供参考。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <regex.h>

#define OUT
#define IN

char extract_IPInfo(IN char *str, OUT char *ip)
{
    regex_t regex;
    regmatch_t pmatch[1];
    const char *pattern = "([0-9]{1,3}\\.){3}[0-9]{1,3}";
    int ret;

    // Compile the regular expression
    ret = regcomp(&regex, pattern, REG_EXTENDED);
    if (ret) {
        fprintf(stderr, "Could not compile regex\n");
        return 0;
    }

    // Execute the regular expression
    const char *p = str;
    while (regexec(&regex, p, 1, pmatch, 0) == 0) {
        // Extract the matched IP address
        int start = pmatch[0].rm_so;
        int end = pmatch[0].rm_eo;
        strncpy(ip, p + start, end - start);
        ip[end - start] = '\0';

        // Print the matched IP address
        printf("Found IP: %s\n", ip);

        // Move the pointer forward
        p += end;
    }

    // Free compiled regular expression
    regfree(&regex);
    return 1;
}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/722299.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

HTML+CSS+PHP实现网页留言板功能(需要创建数据库)

话说前头&#xff0c;我这方面很菜滴。这是我网页作业的一部分。 1.body部分效果展示&#xff08;不包括footer&#xff09; 2、代码 2.1 leaving.php&#xff08;看到的网页&#xff09; <!DOCTYPE html> <html lang"en"> <head> <met…

C++中的结构体——结构体案例2

案例描述 设计一个英雄的结构体&#xff0c;包括成员姓名&#xff0c;年龄&#xff0c;性别&#xff1b;创建结构体数组&#xff0c;其中存放五名英雄 通过冒泡排序的算法&#xff0c;将数组中的英雄按照年龄升序排列&#xff0c;最终打印排序后的结果 五名英雄信息如下&…

ionic 项目通过 android studio 打开报错 capacitor.settings.gradle 文件不存在

问题出现 原因分析 在程序相应的目录上面&#xff0c;没有找到对应的配置文件&#xff0c;但是这个文件不是我们自己生成的&#xff0c;而是通过 ionic 编译之后生成。 处理方案 先执行 ionic build&#xff0c;将 ionic 项目打包出来然后执行 npx cap sync 再使用 Android…

「51媒体」电视台媒体邀约采访报道怎么做?

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好&#xff0c;我是51媒体网胡老师。 电视台作为地方主流媒体&#xff0c;对于新闻报道有着严格的选题标准和报道流程。如果您希望电视台对某个会议或活动进行报道&#xff0c;可以按这样的方法来做&#xff1a; 1.明确活动信…

Elasticsearch docker 安装及基本用法

创建网络 首先通过命令创建一个网络 docker network create es-net然后查看网络 [rootDocker ~]# docker network ls NETWORK ID NAME DRIVER SCOPE 4e315f5e3ae7 bridge bridge local a501a9f3b4ee es-net bridge local ebca66b02e8c host …

OSPF开销、协议优先级、定时器(华为)

#交换设备 OSPF开销值 如果没有定义OSPF接口的开销值&#xff0c;OSPF会根据该接口的带宽自动计算其开销值。 计算公式&#xff1a; 接口开销 带宽参考值 / 接口带宽 &#xff08;取整数部分&#xff0c;结果小于1时取1&#xff09;通过改变带宽参考值可以间接改变接口的开…

Vue10-实战快速上手

实战快速上手 我们采用实战教学模式并结合ElementUI组件库&#xff0c;将所需知识点应用到实际中&#xff0c;以最快速度带领大家掌握Vue的使用&#xff1b; 1、创建工程 注意&#xff1a;命令行都要使用管理员模式运行 1、创建一个名为hello-vue的工程vue init webpack hel…

Transformer预测 | 基于Transformer的锂电池寿命预测(Pytorch,CALCE数据集)

文章目录 文章概述模型描述程序设计参考资料文章概述 Pytorch实现基于Transformer 的锂电池寿命预测,环境为pytorch 1.8.0,pandas 0.24.2 随着充放电次数的增加,锂电池的性能逐渐下降。电池的性能可以用容量来表示,故寿命预测 (RUL) 可以定义如下: SOH(t)=CtC0100%, 其中,…

如何使用GPT?初学者的指南

ChatGPT是一个非常先进的AI工具&#xff0c;它使用GPT-4架构&#xff0c;能够生成自然的语言回应。它的多功能性和理解复杂指令的能力&#xff0c;使得很多人用它来回答各种问题&#xff0c;就像用Google一样输入关键词。不过&#xff0c;ChatGPT还能做更多事情&#xff0c;下面…

TwinCAT3 Scope Y-T NC Project的使用方法(电机参数监控时序图)

TwinCAT3 Scope Y-T NC Project的使用方法 图中有两个电机 在程序中添加两个电机轴 右键点击解决方案&#xff0c;然后添加Scope YT Project 记录绝对位置&#xff0c;速度&#xff0c;相对位置&#xff0c;加速度&#xff0c;跟随误差 如果不是本地的虚拟轴&#xff0c;则可以…

HTML5休闲小游戏《城堡守卫传说》源码,引流、刷广告利器

HTML5休闲小游戏《城堡守卫传说》源码&#xff0c;直接把源码上传到服务器就能使用了&#xff01; 下载链接&#xff1a;https://www.huzhan.com/code/goods467802.html

MacOS - 启动台(LaunchPad)缺少应用软件图标

问题描述 MacOS 有时会遇到已安装的软件在启动台&#xff08;LaunchPad&#xff09;中找不到的 bug&#xff0c;这种情况在新安装软件时易出现。 原因分析 首先去访达&#xff08;Finder&#xff09;中的“应用程序”文件夹确认是否已安装某软件&#xff08;LaunchPad 中图标…

netty解决粘包半包之帧解码器LengthFieldBasedFrameDecoder参数介绍

LengthFieldBasedFrameDecoder的具体参数介绍&#xff1a; 常用参数&#xff1a; maxFrameLength&#xff1a;消息的最大长度LengthFieldOffset&#xff1a;消息的起始位置偏移量&#xff0c;从0的位置开始计算LengthFieldLength&#xff1a;消息体的长度字节数LengthAdjustm…

【调试笔记-20240618-Windows- Tauri 调试中关闭自动重构的功能】

调试笔记-系列文章目录 调试笔记-20240618-Windows- Tauri 调试中关闭自动重构的功能 文章目录 调试笔记-系列文章目录调试笔记-20240618-Windows- Tauri 调试中关闭自动重构的功能 前言一、调试环境操作系统&#xff1a;Windows 10 专业版调试环境调试目标 二、调试步骤搜索相…

Python复数的加、减、乘、除运算

一、复数 复数由实部和虚部组成&#xff0c;形如(a,b均为实数)的数为复数&#xff0c;其中&#xff0c;a被称为实部&#xff0c;b被称为虚部&#xff0c;i为虚数单位&#xff0c;。复数通常用z表示&#xff0c;即zabi&#xff0c;当z的虚部b&#xff1d;0时&#xff0c;则z为实…

Spring Boot 3 搭建

1、jdk 17 2、spring boot 3.1.7 3、pom.xml <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation"http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xs…

数据库 |试卷1试卷2

1.数据库语言四大语句 4.四大类&#xff08;DDL、DML、DQL、DCL&#xff09;_中度ddl-CSDN博客 数据定义&#xff08;data defination language&#xff09; 查询、创建、删除、使用 #查询所有数据库 show databases;#查询当前数据库 select database();#创建数据库 create …

【深度学习】GPT-3,Language Models are Few-Shot Learners(一)

论文&#xff1a; https://arxiv.org/abs/2005.14165 摘要 最近的研究表明&#xff0c;通过在大规模文本语料库上进行预训练&#xff0c;然后在特定任务上进行微调&#xff0c;可以在许多NLP任务和基准上取得显著的进展。虽然这种方法在结构上通常是任务无关的&#xff0c;但…

云原生微服务开发日趋成熟:有效拥抱左移以改善交付

在软件工程和应用程序开发方面&#xff0c;云原生已经成为许多团队的常用术语。当人们调查云原生的世界时&#xff0c;他们经常会得出这样的观点&#xff1a;云原生的整个过程都是针对大型企业应用程序的。几年前&#xff0c;情况可能确实如此&#xff0c;但随着 Kubernetes 等…

web版的数字孪生,选择three.js、unity3D、还是UE4

数字孪生分为客户端版和web端版&#xff0c;开发引擎多种多用&#xff0c;本文重点分析web端版采用哪种引擎最合适&#xff0c; 贝格前端工场结合实际经验和网上主流说法&#xff0c;为您讲解。 一、数字孪生的web版和桌面版 数字孪生的Web版和桌面版是数字孪生技术在不同平台…