From bdb5f395fdeb59ca84669c76910955a9bfe2a14f Mon Sep 17 00:00:00 2001 From: John Kerl Date: Sat, 9 Apr 2016 18:06:58 -0400 Subject: [PATCH] todo --- c/experimental/regexes.c | 24 +++++++++++++++++++++--- c/todo.txt | 22 +++++++++++++++++++++- 2 files changed, 42 insertions(+), 4 deletions(-) diff --git a/c/experimental/regexes.c b/c/experimental/regexes.c index 0fbf4ead9..edfd75046 100644 --- a/c/experimental/regexes.c +++ b/c/experimental/regexes.c @@ -19,7 +19,7 @@ // pmatch[9].rm_so= -1 pmatch[9].rm_eo= -1 static void usage(char* argv0, FILE* o, int exit_code) { - fprintf(o, "Usage: %s {regex} {string}\n", argv0); + fprintf(o, "Usage: %s {string} {regex}\n", argv0); exit(exit_code); } @@ -32,8 +32,8 @@ int main(int argc, char** argv) { } regex_t reg; - char* sregex = argv[1]; - char* sstr = argv[2]; + char* sstr = argv[1]; + char* sregex = argv[2]; int cflags = REG_EXTENDED; const size_t nmatchmax = 10; regmatch_t pmatch[nmatchmax]; @@ -51,11 +51,29 @@ int main(int argc, char** argv) { rc = regexec(®, sstr, nmatchmax, pmatch, eflags); printf("rc=%d\n", rc); + int len = strlen(sstr); if (rc == 0) { for (int i = 0; i < nmatchmax; i++) { + if (pmatch[i].rm_so == -1) + break; printf("pmatch[%i].rm_so=%4lld pmatch[%d].rm_eo=%4lld\n", i, (long long)pmatch[i].rm_so, i, (long long)pmatch[i].rm_eo); + + printf(" "); + for (int j = 0; j < len; j++) { + fputc(sstr[j], stdout); + } + printf("\n"); + + printf(" "); + for (int j = 0; j < len; j++) { + if (j >= pmatch[i].rm_so && j < pmatch[i].rm_eo) + fputc('^', stdout); + else + fputc('.', stdout); + } + printf("\n"); } } else if (rc == REG_NOMATCH) { printf("no match\n"); diff --git a/c/todo.txt b/c/todo.txt index 53bfd4097..a987998a4 100644 --- a/c/todo.txt +++ b/c/todo.txt @@ -11,7 +11,27 @@ BUGFIXES echo 'x=a\tb'| mlr put '$x=gsub($x,"\\t","\t")' x=a\ b -* reg_test/dev material + -> try w/ regex lib directly + + experimental/regexes.c: + + $ a.out 'a@tb' '@t' + rc=0 + pmatch[0].rm_so= 1 pmatch[0].rm_eo= 3 + a@tb + .^^. + + $ a.out 'a\tb' '\t' + rc=0 + pmatch[0].rm_so= 2 pmatch[0].rm_eo= 3 + a\tb + ..^. + + $ a.out 'a\tb' '\\t' + rc=0 + pmatch[0].rm_so= 1 pmatch[0].rm_eo= 3 + a\tb + .^^. ================================================================ TOP-OF-LIST SUMMARY