comparison src/core/ngx_regex.h @ 7981:0b5f12d5c531

PCRE2 library support. The PCRE2 library is now used by default if found, instead of the original PCRE library. If needed for some reason, this can be disabled with the --without-pcre2 configure option. To make it possible to specify paths to the library and include files via --with-cc-opt / --with-ld-opt, the library is first tested without any additional paths and options. If this fails, the pcre2-config script is used. Similarly to the original PCRE library, it is now possible to build PCRE2 from sources with nginx configure, by using the --with-pcre= option. It automatically detects if PCRE or PCRE2 sources are provided. Note that compiling PCRE2 10.33 and later requires inttypes.h. When compiling on Windows with MSVC, inttypes.h is only available starting with MSVC 2013. In older versions some replacement needs to be provided ("echo '#include <stdint.h>' > pcre2-10.xx/src/inttypes.h" is good enough for MSVC 2010). The interface on nginx side remains unchanged.
author Maxim Dounin <mdounin@mdounin.ru>
date Sat, 25 Dec 2021 01:07:15 +0300
parents 6e1a48bcf915
children fbbb5ce52995
comparison
equal deleted inserted replaced
7980:8007ea138d6a 7981:0b5f12d5c531
10 10
11 11
12 #include <ngx_config.h> 12 #include <ngx_config.h>
13 #include <ngx_core.h> 13 #include <ngx_core.h>
14 14
15
16 #if (NGX_PCRE2)
17
18 #define PCRE2_CODE_UNIT_WIDTH 8
19 #include <pcre2.h>
20
21 #define NGX_REGEX_NO_MATCHED PCRE2_ERROR_NOMATCH /* -1 */
22 #define NGX_REGEX_CASELESS PCRE2_CASELESS
23
24 typedef pcre2_code ngx_regex_t;
25
26 #else
27
15 #include <pcre.h> 28 #include <pcre.h>
16 29
17 30 #define NGX_REGEX_NO_MATCHED PCRE_ERROR_NOMATCH /* -1 */
18 #define NGX_REGEX_NO_MATCHED PCRE_ERROR_NOMATCH /* -1 */ 31 #define NGX_REGEX_CASELESS PCRE_CASELESS
19
20 #define NGX_REGEX_CASELESS PCRE_CASELESS
21
22 32
23 typedef struct { 33 typedef struct {
24 pcre *code; 34 pcre *code;
25 pcre_extra *extra; 35 pcre_extra *extra;
26 } ngx_regex_t; 36 } ngx_regex_t;
37
38 #endif
27 39
28 40
29 typedef struct { 41 typedef struct {
30 ngx_str_t pattern; 42 ngx_str_t pattern;
31 ngx_pool_t *pool; 43 ngx_pool_t *pool;
47 59
48 60
49 void ngx_regex_init(void); 61 void ngx_regex_init(void);
50 ngx_int_t ngx_regex_compile(ngx_regex_compile_t *rc); 62 ngx_int_t ngx_regex_compile(ngx_regex_compile_t *rc);
51 63
64 #if (NGX_PCRE2)
65
66 ngx_int_t ngx_regex_exec(ngx_regex_t *re, ngx_str_t *s, int *captures,
67 ngx_uint_t size);
68 #define ngx_regex_exec_n "pcre2_match()"
69
70 #else
71
52 #define ngx_regex_exec(re, s, captures, size) \ 72 #define ngx_regex_exec(re, s, captures, size) \
53 pcre_exec(re->code, re->extra, (const char *) (s)->data, (s)->len, 0, 0, \ 73 pcre_exec(re->code, re->extra, (const char *) (s)->data, (s)->len, 0, 0, \
54 captures, size) 74 captures, size)
55 #define ngx_regex_exec_n "pcre_exec()" 75 #define ngx_regex_exec_n "pcre_exec()"
76
77 #endif
56 78
57 ngx_int_t ngx_regex_exec_array(ngx_array_t *a, ngx_str_t *s, ngx_log_t *log); 79 ngx_int_t ngx_regex_exec_array(ngx_array_t *a, ngx_str_t *s, ngx_log_t *log);
58 80
59 81
60 #endif /* _NGX_REGEX_H_INCLUDED_ */ 82 #endif /* _NGX_REGEX_H_INCLUDED_ */