当前位置: 首页 > 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.cnnetsun.cn/news/1873895.html

相关文章:

  • 2026届必备的十大AI论文平台推荐
  • 如何免费使用draw.io桌面版:离线安全绘图终极指南
  • 封面设计:提升内容吸引力的核心逻辑与实用方法
  • 从EMI到电源噪声:用PowerSI做谐振分析时90%人会忽略的3个设置
  • Helpy社区贡献指南:参与开源项目开发与本地化翻译
  • CSS移动端禁止用户缩放页面_设置viewport user-scalable no属性
  • 软件流程机器人中的自动化脚本
  • YimMenu:5分钟掌握GTA5最强开源辅助工具的完整指南
  • MediaCMS权限系统深度解析:构建企业级媒体访问控制的高效方案
  • TsubakiTranslator:打破语言障碍的Galgame实时翻译神器
  • 隧道光强度检测仪 隧道洞内照度检测器 隧道光强度监测仪
  • BBDown_GUI终极指南:三步完成B站视频批量下载的完整教程
  • GME多模态向量-Qwen2-VL-2B部署教程:基于Docker Compose的多节点向量服务编排
  • GLM-4.1V-9B-Base部署教程:ss -ltnp端口检测与7860服务健康检查
  • SITS2026 AIAgent上线首月即接入217所中小学,但仅11校实现常态化使用:教师接受度断层分析与3级赋能路径(附培训SOP包)
  • 嵌入式处理器的接口资源架构
  • 上手RP2040(基于C SDK)
  • Whoosh vs Elasticsearch:轻量级Python搜索方案选型指南(含性能对比)
  • Golang怎么用sync.Pool复用对象_Golang Pool优化教程【避坑】
  • Oracle EBS与SAP在应收应付核销及清账方面的差异。这是一个ERP系统功能对比的专业问题,我将基于我的专业知识为您详细解答
  • Xubuntu22.04之Chromium表情库方案(二百七十五)
  • FPGA设计原语篇一:什么是原语(Primitive)
  • 研究生亲测:告别EndNote配置地狱和Zotero同步bug,这个引用插件让我效率翻倍
  • Java Swing 实战:手把手教你写一个拼图小游戏(二)
  • 【STM32】STM32F103C8T6多串口通信实战:配置与调试技巧
  • 终极SOCD清洁器:彻底解决游戏按键冲突的免费神器
  • Agent的性能瓶颈:延迟与吞吐量的优化
  • 3大创意引擎:用MediaPipe TouchDesigner插件重塑实时交互创作边界
  • Pixel Aurora Engine 环境部署避坑指南:常见错误与解决方案汇总
  • 3分钟搭建KIMI AI免费API:开发者必备的智能对话接口解决方案