C语言正则表达式实例

版本一

多次解析出错

c 复制代码
#include <stdio.h>
#include <string.h>
#include <regex.h>
#include <stdlib.h>

int main()
{
    char *pattern = "\x02\xf1\x03SX[a-zA-Z0-9]{2}[.;]";  
    regex_t reg;                                        
    int rc = regcomp(&reg, pattern, REG_EXTENDED);      
    if(rc != 0) {
        printf("regcomp error: ret=%d\n", rc);
    }

    char *str = "11\x02\xf1\x03SX11;465\x02\xf1\x03SX11.";
    int size = strlen(str);
    unsigned int offset = 0;
    regmatch_t pm;
    size_t nmatch = 1;
    
    while (offset < size)
    {
        rc = regexec(&reg, str + offset, nmatch, &pm, REG_EXTENDED);
        if(rc != 0) {
            printf("regexec error: ret=%d\n", rc);
        } else {
                      char *part_str = strndup(str + offset + pm.rm_so, pm.rm_eo - pm.rm_so);
                      offset += pm.rm_eo;
                      printf("%s start:%d   end:%d offset:%d\n", part_str, pm.rm_so, pm.rm_eo, offset);
                      free(part_str);
                      part_str = NULL;

        }
    }
    
    regfree(&reg);                                     
    return 0;
}

版本二

c 复制代码
#include <iostream>
#include <regex>
using namespace std;
 
int main()
{
    string str = "\x02\xf1\x03SX11;060F20?.\x11SX32.";
    smatch result;
    regex pattern("SX[a-zA-Z0-9]{2}[.;]");    //匹配四个数字

    //迭代器声明
    string::const_iterator iterStart = str.begin();
    string::const_iterator iterEnd = str.end();
    string temp;
    while (regex_search(iterStart, iterEnd, result, pattern))
    {
        temp = result[0];
        cout << temp << " ";
        iterStart = result[0].second;    //更新搜索起始位置,搜索剩下的字符串
    }

    return 0;
}
相关推荐
我科绝伦(Huanhuan Zhou)26 分钟前
Linux 通用压力测试脚本合集:磁盘 + 网络
linux·网络·压力测试
Zwawa2 小时前
先把轮子转稳,才不会烧心:编码器速度环 PID 怎么接回 PWM
c语言·单片机·嵌入式
Soneswy3 小时前
Linux系统篇--重定向与文件操作命令
linux
有毒的教程3 小时前
Linux底层存储路由配
linux·运维·网络
Linux系统运维工程师_郭主任4 小时前
运维人还在被拒offer?现在能考的,只有 RHCE 10.0。
linux
自养Agent4 小时前
MCP Server Boundary Audit Report
linux·服务器·人工智能·windows·大模型·llm
Coisinier5 小时前
docker命令管理镜像及容器
linux·运维·nginx·docker·容器·操作系统
MoRanzhi12035 小时前
106.正则问题(分治)
python·算法·正则表达式·蓝桥杯·递归·分治算法·字符串处理
A心有千千结5 小时前
通过 SSH 反向代理让服务器借用本机网络访问 GitHub 的最佳实践
linux·服务器·网络·git·ssh·github
书生执笔画浮沉6 小时前
Linux 内核模块为什么不能自己解决兼容性问题?
linux·c·kernel·update·灵感