File: mg_match.md

package info (click to toggle)
civetweb 1.16%2Bdfsg-2
  • links: PTS, VCS
  • area: main
  • in suites: trixie
  • size: 4,576 kB
  • sloc: ansic: 32,463; cpp: 1,374; sh: 480; javascript: 204; makefile: 119; php: 11; perl: 6; python: 3
file content (63 lines) | stat: -rw-r--r-- 2,732 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
# Civetweb API Reference

### `struct mg_match_element;`
### `struct mg_match_context;`
### `mg_match( pat, str, mcx );`

### Parameters of `mg_match()`

| Parameter | Type | Description |
| :--- | :--- | :--- |
|**`pat`**|`const char *`|A pattern string to search for.|
|**`str`**|`const char *`|The pattern will be searched in this string.|
|**`mcx`**|`struct mg_match_context *`|Pointer to a "match context" structure. Optional: can be NULL.|

### Fields of `struct mg_match_context`

| Field | Type | Description |
| :--- | :--- | :--- |
|**`case_sensitive`**|`int`| Input: 1 for case sensitive or for 0 insensitive match. |
|**`num_matches`**|`size_t`| Output: Number of wildcard matches found in `str`. |
|**`match`**|`struct mg_match_element[]`| Output: This array is filled with matches. |

In case `mcx` is not provided to `mg_match()` (a NULL pointer is provided), case insensitive pattern matching will be performed. The wildcard matches will not be stored.

The size of the `match` array is defined by the compile time constant `MG_MATCH_CONTEXT_MAX_MATCHES`.

### Fields of `struct mg_match_element`

| Field | Type | Description |
| :--- | :--- | :--- |
|**`str`**|`const char *`| Pointer to the begin of a wildcard match in `str`. |
|**`len`**|`size_t`| Length of the wildcard match. |

### Return Value

| Type | Description |
| :--- | :--- |
|`ptrdiff_t`| Number of characters matched, counting from the beginning or `str`. If the pattern does not match -1 is returned. Note that 0 may be a valid match for some patterns. |

### Description

Pattern matching function. Try to find characters matching pattern `pat` in string `str`.
A definition of valid pattern can be found in the [User Manual](../UserManual.md).

E.g.:
`mg_match("**.cgi$", "anywhere/anyname.cgi", NULL)` will return 20 (`strlen(str)`).

`mg_match("**.cgi$", "anywhere/anyname.cgi", &mcx)` will return 20 (`strlen(str)`). 
Furthermore will set `mcx.match[0].str` to point to the first match "anywhere/anyname" (that is `str+0`)
and `mcx.match[0].len` to 16 (`strlen("anywhere/anyname")`), but it will not terminate the string.
The value of `mcx.num_matches` is 1, since the only wildcard pattern `**` matches everything.

`mg_match("a?*/?*g", "ABC/DEFG", &mcx)` with `mcx.case_sensitive = 0` will return 8 (`strlen(str)`).
The value of `mcx.num_matches` is 2, one for each `?*` wildcard.
The first match `mcx.match[0].str` will point to "BC" (`str+1`) and `mcx.match[0].len == 2`.
The second match `mcx.match[1].str` will point to "DEF" (`str+4`) and `mcx.match[1].len == 3`.

Note: This is an experimental interface. 
Structure definitions may change in future versions.

### See Also

* Pattern Matching in the [User Manual](../UserManual.md).