当前位置: 首页 > news >正文

Oniguruma 快速上手:5分钟构建你的第一个正则表达式程序

Oniguruma 快速上手:5分钟构建你的第一个正则表达式程序

【免费下载链接】onigurumaregular expression library项目地址: https://gitcode.com/gh_mirrors/on/oniguruma

Oniguruma 是一款功能强大的正则表达式库,它支持多种正则语法和编码格式,广泛应用于文本处理、代码解析等场景。本文将带你快速掌握 Oniguruma 的核心使用方法,通过实际示例演示如何在5分钟内构建一个简单的正则表达式匹配程序。

📋 准备工作:获取 Oniguruma 源码

首先需要获取 Oniguruma 项目源码,执行以下命令克隆仓库:

git clone https://gitcode.com/gh_mirrors/on/oniguruma

🚀 核心步骤:构建你的第一个正则程序

1. 包含头文件

使用 Oniguruma 库的第一步是在代码中包含其核心头文件:

#include <stdio.h> #include <string.h> #include "oniguruma.h"

头文件oniguruma.h定义了库的所有核心函数和数据结构,位于项目根目录的src文件夹中。

2. 初始化正则环境

在使用任何 Oniguruma 函数前,需要初始化编码环境:

OnigEncoding use_encs[1]; use_encs[0] = ONIG_ENCODING_ASCII; onig_initialize(use_encs, sizeof(use_encs)/sizeof(use_encs[0]));

这段代码设置了使用 ASCII 编码,你也可以根据需要选择 UTF-8、UTF-16 等其他编码。

3. 编译正则表达式

使用onig_new()函数编译正则表达式模式:

regex_t* reg; OnigErrorInfo einfo; UChar* pattern = (UChar* )"a(.*)b|[e-f]+"; int r = onig_new(&reg, pattern, pattern + strlen((char* )pattern), ONIG_OPTION_DEFAULT, ONIG_ENCODING_ASCII, ONIG_SYNTAX_DEFAULT, &einfo);

这里我们编译了一个匹配 "a(任意字符)b" 或 "e-f重复出现" 的正则模式。

4. 执行正则匹配

使用onig_search()函数在目标字符串中执行匹配:

OnigRegion *region = onig_region_new(); UChar* str = (UChar* )"zzzzaffffffffb"; int r = onig_search(reg, str, str + strlen((char* )str), str, str + strlen((char* )str), region, ONIG_OPTION_NONE);

OnigRegion结构体用于存储匹配结果,包括匹配位置和捕获组信息。

5. 处理匹配结果

检查匹配结果并输出:

if (r >= 0) { fprintf(stderr, "match at %d\n", r); for (int i = 0; i < region->num_regs; i++) { fprintf(stderr, "Group %d: (%d-%d)\n", i, region->beg[i], region->end[i]); } } else if (r == ONIG_MISMATCH) { fprintf(stderr, "search fail\n"); }

6. 释放资源

使用完毕后释放分配的内存:

onig_region_free(region, 1); onig_free(reg); onig_end();

💡 完整示例代码

完整的示例代码可参考项目中的sample/simple.c文件,该文件演示了最基础的正则匹配流程。核心代码结构如下:

#include <stdio.h> #include <string.h> #include "oniguruma.h" int main(int argc, char* argv[]) { int r; regex_t* reg; OnigErrorInfo einfo; OnigRegion *region; UChar* pattern = (UChar* )"a(.*)b|[e-f]+"; UChar* str = (UChar* )"zzzzaffffffffb"; // 初始化编码 OnigEncoding use_encs[1]; use_encs[0] = ONIG_ENCODING_ASCII; onig_initialize(use_encs, sizeof(use_encs)/sizeof(use_encs[0])); // 编译正则表达式 r = onig_new(&reg, pattern, pattern + strlen((char* )pattern), ONIG_OPTION_DEFAULT, ONIG_ENCODING_ASCII, ONIG_SYNTAX_DEFAULT, &einfo); if (r != ONIG_NORMAL) { /* 错误处理 */ } // 执行匹配 region = onig_region_new(); r = onig_search(reg, str, str + strlen((char* )str), str, str + strlen((char* )str), region, ONIG_OPTION_NONE); // 处理结果 if (r >= 0) { /* 输出匹配信息 */ } else if (r == ONIG_MISMATCH) { /* 处理不匹配情况 */ } // 释放资源 onig_region_free(region, 1); onig_free(reg); onig_end(); return 0; }

📚 进阶学习资源

  • 官方文档:项目中的doc文件夹包含完整的 API 文档和语法说明,如 doc/API 和 doc/SYNTAX.md
  • 更多示例sample目录下提供了各种功能的示例代码,包括回调匹配、编码转换等高级用法
  • 测试用例test目录下的测试程序展示了库的各种边界情况处理

通过本文的介绍,你已经掌握了 Oniguruma 的基本使用方法。这个轻量级但功能强大的正则库支持多种正则语法(如 Ruby、Perl、Java 等),能够满足复杂的文本处理需求。现在就开始尝试使用 Oniguruma 构建你的正则表达式应用吧!

【免费下载链接】onigurumaregular expression library项目地址: https://gitcode.com/gh_mirrors/on/oniguruma

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

http://www.jsqmd.com/news/636237/

相关文章:

  • MATLAB轴承动力学:圆锥滚子轴承故障基于Hertz接触理论,采用龙格库塔方法
  • GTE中文文本嵌入模型效果展示:中文剧本台词角色语义一致性分析
  • Bandizip
  • 终极指南:三分钟解决Windows电脑无法识别苹果手机USB网络共享问题
  • 如何利用Ollama快速构建本地AI应用:LangChain集成与私有文档问答完整指南
  • Python的__getattr__魔术方法在动态属性访问与代理模式中的应用
  • DeepMosaics性能优化:GPU加速与多线程处理技巧
  • Qwen3-Embedding-4B实操手册:会议纪要语义摘要生成——提取‘待办事项’向量簇
  • Phi-4-mini-reasoning在Qt桌面应用开发中的集成教程
  • 解锁Rufus的4个核心能力:从简单格式化到专业级启动盘制作
  • 【传输层-UDP用户数据报协议】
  • 2026年不锈钢桥架TOP6实测推荐:六家实体厂家品质对比 - 外贸老黄
  • 别再只会`apt autoremove`了!dpkg报错(1)的5种修复姿势,从新手到高手都适用
  • 封面设计:提升内容吸引力的核心逻辑与实用方法
  • 终极AI唇形同步工具:sd-wav2lip-uhq完整使用指南
  • 【UVM基础】深入理解lock_model在寄存器模型中的作用
  • 【Java】牛客网华为机试高频题型解析与实战
  • go: Simple Factory Pattern
  • RMBG-1.4 开源模型实战:高精度图像抠图保姆级教程
  • 【TES818】基于VU13P+ZYNQ异构平台的8路100G光纤实时处理系统设计与应用
  • 神经网络发展简史:从LeNet到EfficientNet
  • 智慧园区无感定位技术白皮书——不戴标签、不装基站的全域人员三维定位与轨迹回溯系统
  • Qwen3.5-9B部署教程:Supervisor startsecs=30超时调整与稳定性增强
  • SUPER COLORIZER进阶教程:结合ComfyUI构建可视化图像上色工作流
  • 2026届必备的十大AI论文平台推荐
  • Burpsuite加解密插件Galaxy实战入门:从环境搭建到首条解密请求
  • 如何通过Blender3mfFormat插件实现3D打印文件的无缝导入导出:完整指南
  • 【网络安全实战】利用MS17-010漏洞实现内网渗透与防御策略
  • Qwen3.5-2B在嵌入式边缘设备上的部署与优化实践
  • FastAPI-React架构设计:前端TypeScript与后端Python完美结合