原文:http://hi.baidu.com/cr0_3/item/b519420b8eba99d773e67685

#define PCRE_STATIC // 静态库编译选项 
#include <stdio.h> 
#include <string.h> 
#include <pcre.h> 
#define OVECCOUNT 30 /* should be a multiple of 3 */ 
#define EBUFLEN 128 
#define BUFLEN 1024 
 
int main() 

    pcre  *re; 
    const char *error; 
    int  erroffset; 
    int  ovector[OVECCOUNT]; 
    int  rc, i; 
    char  src [] = "111 <title>Hello World</title> 222";   // 要被用来匹配的字符串 
    char  pattern [] = "<title>(.*)</(tit)le>";              // 将要被编译的字符串形式的正则表达式 
    printf("String : %s\n", src); 
    printf("Pattern: \"%s\"\n", pattern); 
    re = pcre_compile(pattern,       // pattern, 输入参数,将要被编译的字符串形式的正则表达式 
                      0,            // options, 输入参数,用来指定编译时的一些选项 
                      &error,       // errptr, 输出参数,用来输出错误信息 
                      &erroffset,   // erroffset, 输出参数,pattern中出错位置的偏移量 
                      NULL);        // tableptr, 输入参数,用来指定字符表,一般情况用NULL 
    // 返回值:被编译好的正则表达式的pcre内部表示结构 
    if (re == NULL) {                 //如果编译失败,返回错误信息 
        printf("PCRE compilation failed at offset %d: %s\n", erroffset, error); 
        return 1; 
    } 
    rc = pcre_exec(re,            // code, 输入参数,用pcre_compile编译好的正则表达结构的指针 
                   NULL,          // extra, 输入参数,用来向pcre_exec传一些额外的数据信息的结构的指针 
                   src,           // subject, 输入参数,要被用来匹配的字符串 
                   strlen(src),  // length, 输入参数, 要被用来匹配的字符串的指针 
                   0,             // startoffset, 输入参数,用来指定subject从什么位置开始被匹配的偏移量 
                   0,             // options, 输入参数, 用来指定匹配过程中的一些选项 
                   ovector,       // ovector, 输出参数,用来返回匹配位置偏移量的数组 
                   OVECCOUNT);    // ovecsize, 输入参数, 用来返回匹配位置偏移量的数组的最大大小 
    // 返回值:匹配成功返回非负数,没有匹配返回负数 
    if (rc < 0) {                     //如果没有匹配,返回错误信息 
        if (rc == PCRE_ERROR_NOMATCH) printf("Sorry, no match ...\n"); 
        else printf("Matching error %d\n", rc); 
        pcre_free(re); 
        return 1; 
    } 
    printf("\nOK, has matched ...\n\n");   //没有出错,已经匹配 
    for (i = 0; i < rc; i++) {             //分别取出捕获分组 $0整个正则公式 $1第一个() 
        char *substring_start = src + ovector[2*i]; 
        int substring_length = ovector[2*i+1] - ovector[2*i]; 
        printf("$%2d: %.*s\n", i, substring_length, substring_start); 
    } 
    pcre_free(re);                     // 编译正则表达式re 释放内存 
    return 0; 
}

转载于:https://www.cnblogs.com/Leo-Forest/archive/2012/07/13/2590662.html

PCRE demo【转】相关推荐

  1. Nginx + FastCGI 程序(C/C++) 搭建高性能web service的Demo及部署发布

    1.介绍     Nginx - 高性能web server,这个不用多说了,大家都知道.     FastCGI程序 - 常驻型CGI程序,它是语言无关的.可伸缩架构的CGI开放扩展,其主要行为是将 ...

  2. php pcre回溯攻击,php preg_match pcre回溯绕过

    原理 需要知识:正则NFA回溯原理,php的pcre.backtrack_limit设置. 正则NFA回溯原理 正则表达式是一个可以被"有限状态自动机"接受的语言类. " ...

  3. 【入门篇】Nginx + FastCGI 程序(C/C++) 搭建高性能web service的Demo及部署发布

    http://blog.csdn.net/allenlinrui/article/details/19419721 分类: C/C++2014-02-18 17:58 3875人阅读 评论(0) 收藏 ...

  4. jquery autocomplete demo

    根据用户输入值进行搜索和过滤,让用户快速找到并从预设值列表中选择. jquery.autocomplete参考地址 http://bassistance.de/jquery-plugins/jquer ...

  5. BERT-Pytorch demo初探

    https://zhuanlan.zhihu.com/p/50773178 概述 本文基于 pytorch-pretrained-BERT(huggingface)版本的复现,探究如下几个问题: py ...

  6. MinkowskiEngine demo ModelNet40分类

    MinkowskiEngine demo ModelNet40分类 本文将看一个简单的演示示例,该示例训练用于分类的3D卷积神经网络.输入是稀疏张量,卷积也定义在稀疏张量上.该网络是以下体系结构的扩展 ...

  7. Android - 下载别人的android demo 运行的时候加载很久问题处理

    一般从git 下载别人的demo 的时候每次都要加载很久,下载gradle 版本之类的, 处理方法把 gradle 下面的 gradle-wrapper 里面的distributionUrl 替换自己 ...

  8. android studio导入第三方库和demo

    导demo,导第三方库,都可以用这个方法,别想太复杂了, file - new - import module

  9. iOS蓝牙开发---CoreBluetooth[BLE 4.0] 初级篇[内附Demo地址]

    一.蓝牙基础知识 (一)常见简称 1.MFI  make for ipad ,iphone, itouch 专们为苹果设备制作的设备,开发使用ExternalAccessory 框架(认证流程貌似挺复 ...

  10. 【应用篇】Activiti外置表单实例demo(四)

    在这里我想说的外置表单.是说我们将我们自己的jsp(.form,.html)等页面上传到工作流的数据库中,当任务运行到当前结点时.给我们像前台发送绑定好的表单. 此处是给表单绑定表单的过程 不允许为: ...

最新文章

  1. 随机投影(Random Projection)降维方法
  2. Linux学习总结(四十七)NFS服务配置 上篇
  3. 梯度消失问题学习资料整理
  4. python强大体现在哪些方面-大公司里哪些方面运用了python?
  5. python3 socketserver_Python3中的SocketServer
  6. html表格怎么设置浮动,html – 表格布局和浮动左和引导网格
  7. 50 家硅谷 IT 公司技术博客
  8. Single Image Haze Removal Using Dark Channel Prior(使用暗通道先验去除单张图像雾霾)
  9. java实现pdf转word
  10. Keil中如何生成bin文件
  11. oracle系统FA调整折旧年限,Oracle财务管理系统培训手册.doc
  12. 一种新型智慧停车场车位占用监测模块
  13. 计算机切换用户快捷键,电脑操作中如何快速切换用户?
  14. VC++课程设计常见问题解答
  15. https://juejin.im/entry/559f1d31e4b0876bf61e4d20
  16. nyoj1273 河南省第九届省赛_宣传墙、状压DP+矩阵幂加速
  17. 计算平均成绩和总成绩
  18. 前端基础知识总结---CSS篇
  19. Java毕业设计_基于BootStrap的晴雅花艺交流论坛的开发
  20. 杂谈---令人抓狂的数据库行级锁问题

热门文章

  1. bdm导入mysql_MySQL数据库导入教程
  2. 拓端tecdat|R语言推特twitter网络转发可视化分析
  3. 微信小程序教程笔记2
  4. pytorch加载自己的数据集图片格式
  5. ​​​​​​​(复制python包,产生的问题) pip Fatal error in launcher: Unable to create process using
  6. Tensorflow CUDA及CUDNN版本对应关系表查询
  7. 深度学习常用的数据集,包括各种数据跟图像数据
  8. 淘沙潜行,数一数英雄的多姿,王者荣耀英雄、皮肤、武器展览
  9. python日期转化利器arrow实践
  10. java实现动态规划求解给定矩阵的和最大的子数组(矩阵中数字正负均存在)