日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

PCRE接口pcre_fullinfo混合子模式调用结果

發(fā)布時(shí)間:2024/2/28 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 PCRE接口pcre_fullinfo混合子模式调用结果 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

NGINX中使用PCRE最為正則表達(dá)式的解析接口,對(duì)編譯和解析過程中的一些點(diǎn)進(jìn)行了測(cè)試驗(yàn)證

PCRE接口pcre_fullinfo()的描述在這個(gè)鏈接中有詳細(xì)的描述,這里對(duì)接口的一些

鏈接?http://mushclient.com/pcre/index.html

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

PCRE_INFO_CAPTURECOUNT: 得到的是所有子模式的個(gè)數(shù),包含上述的兩種子模式個(gè)數(shù);

PCRE_INFO_NAMECOUNT: 得到的是命名子模式的個(gè)數(shù),不包括非命名子模式的個(gè)數(shù);

PCRE_INFO_NAMETABLE:

對(duì)于只有命名子模式的情況,例如文檔描述的一個(gè)例子:


?(?<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 ??

而對(duì)于混合模式;例子如下,注意開頭的兩個(gè)數(shù)字,就是說capture的數(shù)字是和非命名子模式一起排列的,也就是根據(jù)左括號(hào)的先后排列的:

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

{captures 4?

named_captures 2?
name_size 7}

?
0 2 abb???
0 3 adfa?

測(cè)試?yán)?/p> #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?
版權(quán)聲明:本文為博主原創(chuàng)文章,轉(zhuǎn)載請(qǐng)附上博文鏈接!

總結(jié)

以上是生活随笔為你收集整理的PCRE接口pcre_fullinfo混合子模式调用结果的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。