本章我们主要讲述一下nginx中表达式匹配(ngx_regex)的实现。
1. 相关静态函数的声明
2. 相关静态变量的定义
下面简单介绍一下各变量:
-
ngx_regex_commands: 定义了nginx regex模块支持的所有命令
-
ngx_regex_module_ctx: regex模块上下文
-
ngx_regex_module: 对应的regex模块
-
ngx_pcre_pool: 用于保存regex模块中pcre所用的内存池
-
ngx_pcre_studies: 保存ngx_regex_elt_t
结构的链表
3. pcre内存管理相关函数
这里函数较为简单,只是替换了默认的pcre的内存分配与释放
4. 函数ngx_regex_compile()
本函数较为简单,基本上是对pcre_compile()函数的封装,下面我们简单介绍一下:
5. 函数ngx_regex_exec_array()
用字符串s
分别匹配a
数组中的所有pattern,直到找出一个匹配,或出现相应的错误退出。
6. pcre库中涉及到的内存分配与释放
在系统初始化时,会替换掉pcre库中的默认的内存分配与释放函数。
7. 函数ngx_pcre_free_studies()
当前我们未定义NGX_HAVE_PCRE_JIT
宏,所以并不会调用到此函数。本函数的作用是释放ngx_pcre_studies
链表中的extra数据。
8. 函数ngx_regex_module_init()
这里用于初始化nginx regex模块。这里我们再说明一下nginx中模块的初始化流程: 首先解析配置文件,调用模块对应的context上下文回调函数,接着再调用init_module
回调函数。因此,在调用本函数之前,链表ngx_pcre_studies
就已经建立,然后调用本函数时完成相应pattern的学习。
9. 函数ngx_regex_create_conf()
初始化nginx regex模块上下文的回调函数, 主要是分配相应的空间。
10. 函数ngx_regex_init_conf()
初始化nginx regex模块上下文的回调函数,主要是进行相应数据赋默认值。
11. 函数ngx_regex_pcre_jit()
在nginx配置文件中,解析到pcre_jit
命令的回调函数。
[参看]
-
Nginx模块开发中使用PCRE正则表达式匹配
-
nx单独使用pcre的一个小坑
-
深入解析Nginx的pcre库及相关注意事项