regex - "+","[","]" in Regular expression did not take effect in Linux C -
i got program written in c language apply regular expression string.
however,it works regular expression
\\w ('\\' means single '\' in string). \\w+ \\s+ \\s or [^\\s]+ did not take effect.
it seems that,
"^","[","]","+"
was not recognized program.
the program running format below:
./program {regular expression}
then input line of string,the program apply regular expression string , give result.
i check program , have not found wrong.
/* function substring string */ static char* substr(const char*str,unsigned start, unsigned end) { unsigned n = end - start; static char stbuf[256]; strncpy(stbuf, str + start, n); stbuf[n] = 0; return stbuf; } /* main program */ int main(int argc, char** argv) { char * pattern; int x, z, lno = 0, cflags = 0; char ebuf[128], lbuf[256]; regex_t reg; regmatch_t pm[10]; const size_t nmatch = 10; /* complie regular expression*/ pattern = argv[1]; z = regcomp(®, pattern, cflags); if (z != 0){ regerror(z, ®, ebuf, sizeof(ebuf)); fprintf(stderr, "%s: pattern '%s' \n",ebuf, pattern); return 1; } /* line of input string */ while(fgets(lbuf, sizeof(lbuf), stdin)) { ++lno; if ((z=strlen(lbuf)) > 0 && lbuf[z-1] == '\n') lbuf[z - 1] = 0; /* match input line regular expression */ z = regexec(®, lbuf, nmatch, pm, 0); if (z == reg_nomatch){printf("not match\n,pattern %s\n",pattern); continue;} else if (z != 0) { regerror(z, ®, ebuf, sizeof(ebuf)); fprintf(stderr, "%s: regcom('%s')\n", ebuf, lbuf); return 2; } printf(" $%d='%s'\n", x, substr(lbuf, pm[x].rm_so, pm[x].rm_eo));}; } } /*releasing compiled regular expresion struct*/ regfree(®); return 0; } /* deal output result */ (x = 0; x < nmatch && pm[x].rm_so != -1; ++ x) { if (!x) {printf("%04d: %s\n", lno, lbuf); printf(" pattern %s",pattern); printf(" $%d='%s'\n", x, substr(lbuf, pm[x].rm_so, pm[x].rm_eo));}; } } /*releasing compiled regular expresion struct*/ regfree(®); return 0; }
Comments
Post a Comment