pang@1: #include pang@1: #include pang@1: #include pang@1: pang@1: #define __USE_GNU pang@1: #include pang@1: pang@1: const size_t BUFSIZE = 5000; pang@1: const size_t REMSIZE = 3; pang@1: pang@1: const char *CLR_START = "-CLR_START-"; pang@1: const char *CLR_END = "-CLR_END-"; pang@1: pang@1: int main(int argc, char **argv) pang@1: { pang@1: char *buf = calloc(BUFSIZE, sizeof(char)); pang@1: pang@1: regex_t *re = calloc(1, sizeof(regex_t)); pang@1: regcomp(re, "(Hello)", REG_EXTENDED); pang@1: pang@1: regmatch_t *rem = calloc(REMSIZE, sizeof(regmatch_t)); pang@1: pang@1: size_t CLR_START_len = strlen(CLR_START); pang@1: size_t CLR_END_len = strlen(CLR_END); pang@1: pang@1: size_t out_len = strlen(buf); pang@1: if (out_len >= BUFSIZE) pang@1: out_len = BUFSIZE - 1; pang@1: pang@1: char *out = calloc(out_len, sizeof(char)); pang@1: unsigned int out_pos = 0; pang@1: pang@1: while (fgets(buf, BUFSIZE, stdin)) pang@1: { pang@1: regexec(re, buf, REMSIZE, rem, 0); pang@1: pang@1: int i; pang@1: pang@1: for (i = 0; i < REMSIZE; i++) pang@1: fprintf(stderr, "%d %d \n", rem[i].rm_so, rem[i].rm_eo); //d// 20100327 PBA pang@1: pang@1: for (i = 1; i < REMSIZE; i++) pang@1: { pang@1: int so = rem[i].rm_so; pang@1: int eo = rem[i].rm_eo; pang@1: int nso = BUFSIZE; pang@1: pang@1: if ((i + 1) < REMSIZE) pang@1: nso = rem[i + 1].rm_so; pang@1: if (nso == -1) pang@1: nso = BUFSIZE; pang@1: pang@1: if (so >= 0 && eo >= 0) pang@1: { pang@1: int match_len = eo - so; pang@1: out_len += CLR_START_len + CLR_END_len; pang@1: out = (char *)realloc(out, out_len*sizeof(char)); pang@1: if (i == 0) pang@1: { pang@1: strncpy(&out[out_pos], buf, so); pang@1: out_pos += so; pang@1: } pang@1: strncpy(&out[out_pos], CLR_START, CLR_START_len); pang@1: out_pos += CLR_START_len; pang@1: strncpy(&out[out_pos], &buf[so], match_len); pang@1: out_pos += match_len; pang@1: strncpy(&out[out_pos], CLR_END, CLR_END_len); pang@1: out_pos += CLR_END_len; pang@1: strncpy(&out[out_pos], &buf[eo], nso - eo); pang@1: out_pos += nso - eo; pang@1: } pang@1: } pang@1: pang@1: fputs(out, stdout); pang@1: } pang@1: pang@1: return 0; pang@1: }