summaryrefslogtreecommitdiffhomepage
path: root/misc/examples/regularexpressions/regex2.c
blob: 85890070f835182720a1c01a1f50ce1143f48624 (plain)
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
#define i_import
#include <stc/cregex.h>

int main(void)
{
    struct { const char *pattern, *input; } s[] = {
        {"(\\d\\d\\d\\d)[-_](1[0-2]|0[1-9])[-_](3[01]|[12][0-9]|0[1-9])",
         "date: 2024-02-29 leapyear day, christmas eve is on 2022-12-24."
        },
        {"(https?://|ftp://|www\\.)([0-9A-Za-z@:%_+~#=-]+\\.)+([a-z][a-z][a-z]?)(/[/0-9A-Za-z\\.@:%_+~#=\\?&-]*)?",
         "https://en.cppreference.com/w/cpp/regex/regex_search"
        },
        {"!((abc|123)+)!", "!123abcabc!"},
        {"(\\p{Alpha}+ )+(\\p{Nd}+)", "Großpackung süßigkeiten 199"},
        {"\\p{Han}+", "This is Han: 王明:那是杂志吗?"},
    };

    cregex re = {0};
    c_forrange (i, c_arraylen(s))
    {
        int res = cregex_compile(&re, s[i].pattern);
        if (res < 0) {
            printf("error in regex pattern: %d\n", res);
            continue;
        }
        printf("\ninput: %s\n", s[i].input);

        c_formatch (j, &re, s[i].input) {
            c_forrange (k, cregex_captures(&re) + 1)
                printf("  submatch %lld: %.*s\n", k, c_SS(j.match[k]));
        }
    }
    cregex_drop(&re);
}