From 3f89c290700618eae78eaa289bdb88d1cfb3514d Mon Sep 17 00:00:00 2001 From: Tyge Lovset Date: Wed, 20 Jul 2022 23:13:11 +0200 Subject: Added cregex_replace*() [implemented in utf8code.c]. Added examples/regex_replace.c. Docs not ready, i.e. API not fixed. Some other refactoring and minor fixes/improvements. cstr_assign_sv() now returns char* like the other cstr_assign*(). --- examples/regex_replace.c | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 examples/regex_replace.c (limited to 'examples/regex_replace.c') diff --git a/examples/regex_replace.c b/examples/regex_replace.c new file mode 100644 index 00000000..1216701f --- /dev/null +++ b/examples/regex_replace.c @@ -0,0 +1,35 @@ +#define i_implement +#include +#include +#include + +cstr sub_20y(int i, csview m) { + if (i == 1) { // year + int year; + sscanf(m.str, "%4d", &year); + return cstr_from_fmt("%04d", year - 20); + } + return cstr_from_sv(m); +} + +int main() +{ + const char* pattern = "\\b(\\d\\d\\d\\d)-(1[0-2]|0[1-9])-(3[01]|[12][0-9]|0[1-9])\\b"; + const char* input = "start date: 2015-12-31, end date: 2022-02-28"; + + c_auto (cregex, re) + c_auto (cstr, str1, str2) + { + printf("input: %s\n", input); + /* European date format */ + str1 = cregex_replace(input, pattern, "\\3.\\2.\\1"); + printf("euros: %s\n", cstr_str(&str1)); + + /* US date format, and subtract 20 years: */ + str2 = cregex_replace_fn(input, pattern, "\\1/\\3/\\2", sub_20y, 0, 0); + printf("us-20: %s\n", cstr_str(&str2)); + } +} + +#include "../src/cregex.c" +#include "../src/utf8code.c" -- cgit v1.2.3