NGINX中使用PCRE最为正则表达式的解析接口,对编译和解析过程中的一些点进行了测试验证

PCRE接口pcre_fullinfo()的描述在这个链接中有详细的描述,这里对接口的一些

链接 http://mushclient.com/pcre/index.html

这里描述一下命名子模式(named subpattern)和非命名子模式(numbering subpattern)混合使用的情况接口

PCRE_INFO_CAPTURECOUNT: 得到的是所有子模式的个数,包含上述的两种子模式个数;

PCRE_INFO_NAMECOUNT: 得到的是命名子模式的个数,不包括非命名子模式的个数;

PCRE_INFO_NAMETABLE:

对于只有命名子模式的情况,例如文档描述的一个例子:

(?<date> (?<year>(\d\d)?\d\d) - (?<month>\d\d) - (?<day>\d\d) )
 00 01 d  a  t  e  00 ??
  00 05 d  a  y  00 ?? ??
  00 04 m  o  n  t  h  00
  00 02 y  e  a  r  00 ??

而对于混合模式;例子如下,注意开头的两个数字,就是说capture的数字是和非命名子模式一起排列的,也就是根据左括号的先后排列的:

(eeeee)(?<abb> exception)(?<adfa>xydz)(ddddd)\k<abb>\1\2

{captures 4

named_captures 2 
name_size 7}

0 2 abb?? 
0 3 adfa

测试例子

#include <stdlib.h>
#include <pcre.h>#define NGX_REGEX_CASELESS    PCRE_CASELESStypedef struct {pcre        *code;pcre_extra  *extra;
} ngx_regex_t;int main()
{pcre  *re;char       *errstr;int  erroff;int captures =0, named_captures, name_size;char  *name;char  *data = "(eeeee)(?<abb> exception)(?<adfa>xydz)(ddddd)\\k<abb>\\1\\2";int n, i;char  *p; printf("%s \n", data);p = data;printf("%s \n", p);re = pcre_compile(data, PCRE_CASELESS, &errstr, &erroff, NULL);if(NULL == re){printf("compile pcre failed\n");return 0;}n = pcre_fullinfo(re, NULL, PCRE_INFO_CAPTURECOUNT, &captures);if(n < 0){printf("pcre_fullinfo PCRE_INFO_CAPTURECOUNT failed %d \n", n);return 0;}         printf(" captures %d \n", captures);n = pcre_fullinfo(re, NULL, PCRE_INFO_NAMECOUNT, &named_captures);if(n < 0){printf("pcre_fullinfo PCRE_INFO_NAMECOUNT failed %d \n", n);return 0;}printf("named_captures %d \n", named_captures);n = pcre_fullinfo(re, NULL, PCRE_INFO_NAMEENTRYSIZE, &name_size);if(n < 0){printf("pcre_fullinfo PCRE_INFO_NAMEENTRYSIZE failed %d \n", n);return 0;}printf("name_size %d \n", name_size);n = pcre_fullinfo(re, NULL, PCRE_INFO_NAMETABLE, &name);if(n < 0){printf("pcre_fullinfo PCRE_INFO_NAMETABLE failed %d \n", n);return 0;}p =name;int j;for(j = 0; j < named_captures; j++){for(i = 0; i <2; i++){printf("%x ", p[i]);      }printf("%s \n", &p[2]);p += name_size;}return 1;
}

--------------------- 
作者:zwleagle 
来源:CSDN 
原文:https://blog.csdn.net/zwleagle/article/details/8563364 
版权声明:本文为博主原创文章,转载请附上博文链接!

PCRE接口pcre_fullinfo混合子模式调用结果相关推荐

  1. Matlab.NET混合编程调用Figure窗体

    原文:[原创]Matlab.NET混合编程调用Figure窗体 1.前言 做Matlab.NET混合编程好几年了,虽然Matlab很多函数忘记得差不多了,但基本的东西还是能熟练使用.特别是在C#调用M ...

  2. 怎么看调用的接口_SpringCloud服务间调用

    本篇简介 在上一篇我们介绍了SpringCloud中的注册中心组件Eureka.Eureka的作用是做服务注册与发现的,目的是让不同的服务与服务之间都可以通过注册中心进行间接关联,并且可以通过注册中心 ...

  3. 【WebService笔记01】使用JWS实现WebService接口的发布和调用

    这篇文章,主要介绍如何使用JWS实现WebService接口的发布和调用. 目录 一.JWS实现WebService接口 1.1.JWS发布WebService接口 (1)编写接口 (2)编写实现类 ...

  4. 银联商务MISPOS接口开发demo 需要调用POSINF.DLL

    1.接口文档 1.1 无gmc界面接口 (dll/ocx) dll调用(posinf.dll)函数名为:int bankall (char * request,char *response),其中第一 ...

  5. java扫描接口_一种扫描接口并生成可调用API接口文档的方法与流程

    本发明属于JavaWeb开发技术领域,涉及一种API接口文档的生成方法,尤其是一种扫描接口并生成可调用API接口文档的方法. 背景技术: API(Application Programming Int ...

  6. LabVIEW与MATLAB混合编程——调用Matlab中.m的函数

    LabVIEW与MATLAB混合编程--调用Matlab中.m的函数 1.调用labview中的matlab script 通过Labview中的Matlab script可以调用Matlab的.m程 ...

  7. 淘宝网及新浪网等几大官方IP查询API接口地址库的调用及使用方法教程

    淘宝对外提供共享的一个IP地址库API,更新也比较及时,非常适合我们日常的使用. 以下讨论的是和淘宝网 IP查询 地址库 调用 API 相关的淘宝网及新浪网等几大官方IP查询API接口地址库的调用及使 ...

  8. python调用第三方接口获取数据_python 接口实现 供第三方调用的例子

    python 接口实现 供第三方调用的例子 实验环境 1.环境问题 python 2.7 以上自带的pyunit bottle 作为一个python的简易服务器 在python安装目录 打开命令窗口( ...

  9. 开发者必备工具,一键生成接口文档、调用示例

    前言 开发中,接口文档很重要,特别是现在web开发都开始前后端分离了,更加需要一个好的接口文档. 那要怎么快速的出接口文档.调用示例.mock呢?如果太麻烦,很多人就不愿意去写了. 今天给大家介绍一个 ...

最新文章

  1. POJ1465 Multiple——Bfs+余数判重——Pku1465
  2. python的68个内置函数
  3. oracle开放查询表权限_oracle 查询当前用户的表和其他用户的表
  4. 数据库毗连过多的错误,年夜概的启事分解及措置惩罚行动
  5. 中psr_PSR-SX900测评:雅马哈升级幅度较大的高品质编曲键盘
  6. linux用户登录实验,实验三 Linux系统登录及用户管理
  7. excel 科学计数法转换成文本完整显示_表格技巧—Excel里身份证号码显示不全的多种解决办法...
  8. linux mysql配置文件修改编码,linux修改mysql字符集编码
  9. Robotium测试报告的生成方法(下)
  10. 软件测试之测试报告案例
  11. 20172328的结对编程四则运算第二周-整体总结
  12. 我与龙芯电脑的第一次亲密接触
  13. Python九九口诀表
  14. HDU 6148 Valley Numer(数位DP)
  15. 《MySQL数据库进阶实战》读后感(SQL 小虚竹)
  16. 杂记(二):while(*target++)(位于小甲鱼C语言视频第22课)
  17. 仿牌独立站如何通过PayPal.Me亲友付进行收款
  18. ant脚本编译java_1.4 在Ant中编译Java代码
  19. tiri单片机_51单片机的SCON寄存器与C程序解析
  20. VScode常用快捷键总结

热门文章

  1. 如何获取FragmentTabHost中指定标签页的Fragment
  2. JSP中 request.getRealPath(/xx/yy) 方法提示已经过时的替代方法
  3. 如何监控和提高IIS的性能
  4. 为了不再颓废,不再堕落......转操作系统为ubuntu,转语言环境为java...
  5. 郁闷的 ConfigurationManager.OpenExeConfiguration
  6. 中石油训练赛 - Flow Finder(树上模拟)
  7. POJ - 3304 Segments(简单几何)
  8. DCN RepPoints解读
  9. 数据分析与挖掘-python常用数据预处理函数
  10. __declspec(selectany)的作用