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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Nginx >内容正文

Nginx

Nginx模块开发中使用PCRE正则表达式匹配

發(fā)布時間:2024/2/28 Nginx 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Nginx模块开发中使用PCRE正则表达式匹配 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Nginx內(nèi)部對pcre庫的常用操作進行了封裝. 封裝的源碼位于nginx/src/core/ngx_regex.c, 同時將pcre內(nèi)使用的內(nèi)存池更變?yōu)榱薔ginx的內(nèi)存池.

  • pcre_compile:

    Nginx封裝了pcre_compile方法. 方法名為ngx_regex_compile.

    ngx_regex_compile方法的參數(shù)需要傳入一個ngx_regex_compile_t來進行編譯正則等操作.

    ngx_regex_compile_t結(jié)構(gòu)如下:

    typedef struct {ngx_str_t pattern; // 正則ngx_pool_t *pool; // 每個request分配的內(nèi)存池ngx_int_t options; // pcre optionsngx_regex_t *regex; // 編譯完畢后的pcre實例int captures;int named_captures;int name_size;u_char *names;ngx_str_t err; // 錯誤信息 } ngx_regex_compile_t;`

    當編譯正則成功時會返回NGX_OK并且會在內(nèi)部調(diào)用pcre_study來進一步提高正則匹配性能. 失敗時會返回NGX_ERROR. 同時失敗的錯誤信息會保存在err成員變量中.

  • pcre_exec

    Nginx同樣封裝了pcre_exec封裝后的方法名為:ngx_regex_exec?源碼位于nginx/src/core/ngx_regex.h文件中:

    #define ngx_regex_exec(re, s, captures, size) \pcre_exec(re->code, re->extra, (const char *) (s)->data, (s)->len, 0, 0, \captures, size)

    可以看到參數(shù)re要求的是ngx_regex_compile_t中的regex成員變量. 而被搜索的字符串被替換成了Nginx內(nèi)部的字符串類型ngx_str_t. 同時也將Nginx內(nèi)部不常用的搜索偏移以及選項設置為成0. 如果仍需要使用偏移以及選項的話可以直接使用pcre_exec來跳過Nginx的封裝.

Refs:

  • http://dinic.iteye.com/blog/2057150
  • http://blog.csdn.net/wangwenwen/article/details/7578388?spm=5176.8246799.blogcont.5.C4EXiu

總結(jié)

以上是生活随笔為你收集整理的Nginx模块开发中使用PCRE正则表达式匹配的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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