pmatch
gres |= pmatch(string, *p);
static int pmatch(Char *, Char *);
regmatch_t pmatch[], int eflags)
start = string + pmatch[0].rm_so;
stop = string + pmatch[0].rm_eo;
m->pmatch = NULL;
free(m->pmatch);
if (m->pmatch == NULL)
m->pmatch = reallocarray(NULL, m->g->nsub + 1,
if (m->pmatch == NULL) {
m->pmatch[i].rm_so = m->pmatch[i].rm_eo = -1;
free(m->pmatch);
assert(m->pmatch[i].rm_so == -1);
assert(m->pmatch[i].rm_eo == -1);
pmatch[0].rm_so = m->coldp - m->offp;
pmatch[0].rm_eo = endp - m->offp;
assert(m->pmatch != NULL);
pmatch[i] = m->pmatch[i];
pmatch[i].rm_so = -1;
pmatch[i].rm_eo = -1;
free(m->pmatch);
m->pmatch[i].rm_so = sp - m->offp;
m->pmatch[i].rm_eo = sp - m->offp;
if (m->pmatch[i].rm_eo == -1)
assert(m->pmatch[i].rm_so != -1);
len = m->pmatch[i].rm_eo - m->pmatch[i].rm_so;
ssp = m->offp + m->pmatch[i].rm_so;
offsave = m->pmatch[i].rm_so;
m->pmatch[i].rm_so = sp - m->offp;
m->pmatch[i].rm_so = offsave;
offsave = m->pmatch[i].rm_eo;
m->pmatch[i].rm_eo = sp - m->offp;
m->pmatch[i].rm_eo = offsave;
regmatch_t *pmatch; /* [nsub+1] (0 element unused) */
regmatch_t pmatch[], int eflags)
return(smatcher(g, string, nmatch, pmatch, eflags));
return(lmatcher(g, string, nmatch, pmatch, eflags));
regmatch_t pmatch[32];
memset(pmatch, 0, sizeof(pmatch));
i = regexec(&preg, $1, 32, pmatch, 0);
for (i = 1; i < 32 && pmatch[i].rm_so != -1; i++)
gr = calloc(pmatch[i].rm_eo - pmatch[i].rm_so +
strncpy(gr, $1 + pmatch[i].rm_so,
pmatch[i].rm_eo - pmatch[i].rm_so);
gr[pmatch[i].rm_eo - pmatch[i].rm_so] = '\0';
extern int pmatch(fa *, const char *);
while (pmatch(pfa, start)) {
if (pmatch(pfa, t)) {
} while (pmatch(pfa,t));
mf = pmatch;
pmatch.rm_so = 0;
pmatch.rm_eo = fmtlen;
if (regexec(re, fmt, 1, &pmatch, REG_STARTEND) != 0) {
regmatch_t pmatch;
void printline(str_t *line, int sep, regmatch_t *pmatch);
regmatch_t pmatch = { 0 };
l->len - offset, &pmatch, flags);
pmatch.rm_so += offset;
pmatch.rm_eo += offset;
pmatch.rm_so = offset;
pmatch.rm_eo = l->len;
r = regexec(&r_pattern[i], l->dat, 1, &pmatch, flags);
if (pmatch.rm_so != 0 || pmatch.rm_eo != l->len)
if (oflag && pmatch.rm_so != pmatch.rm_eo)
printline(l, ':', oflag ? &pmatch : NULL);
printline(l, '-', oflag ? &pmatch : NULL);
offset = pmatch.rm_eo;
grep_search(fastgrep_t *fg, char *data, size_t dataLen, regmatch_t *pmatch,
pmatch->rm_so = -1;
pmatch->rm_eo = -1;
static int grep_search(fastgrep_t *, char *, size_t, regmatch_t *pmatch, int);
pmatch->rm_so = j;
pmatch->rm_eo = j + fg->patternLen;
pmatch->rm_so, pmatch->rm_eo))
pmatch->rm_so = j - fg->patternLen;
pmatch->rm_eo = j;
pmatch->rm_so, pmatch->rm_eo)) {
pmatch->rm_so = j;
pmatch->rm_eo = j + fg->patternLen;
wmatch(data, dataLen, pmatch->rm_so,
pmatch->rm_eo)) {
printline(str_t *line, int sep, regmatch_t *pmatch)
(pmatch ? pmatch->rm_so : 0));
if (pmatch)
fwrite(line->dat + pmatch->rm_so,
pmatch->rm_eo - pmatch->rm_so, 1, stdout);
regmatch_t *pmatch;
pmatch = xreallocarray(NULL, re.re_nsub+1, sizeof(regmatch_t),
argc > 4 && argv[4] != NULL ? argv[4] : "", pmatch);
free(pmatch);
regmatch_t *pmatch;
pmatch = xreallocarray(NULL, re.re_nsub+1, sizeof(regmatch_t), NULL);
do_regexpindex(argv[2], &re, source, pmatch);
do_regexp(argv[2], &re, source, argv[4], pmatch);
free(pmatch);
regmatch_t pmatch[4];
if (regexec(&re, s, nmatch, pmatch, 0) != 0)
if (pmatch[0].rm_eo <= pmatch[0].rm_so)
if (pmatch[1].rm_eo <= pmatch[1].rm_so)
len = pmatch[1].rm_eo - pmatch[1].rm_so;
memcpy(f, s + pmatch[1].rm_so, len);
if (pmatch[2].rm_eo > pmatch[2].rm_so) {
len = pmatch[2].rm_eo - pmatch[2].rm_so - 1;
memcpy(c, s + pmatch[2].rm_so + 1, len);
if (pmatch[3].rm_eo > pmatch[3].rm_so) {
for (i = pmatch[3].rm_so; i < pmatch[3].rm_eo; i++) {
regmatch_t pmatch[4];
if (regexec(&re, s, nmatch, pmatch, 0) != 0)
if (pmatch[0].rm_eo <= pmatch[0].rm_so)
if (pmatch[1].rm_eo <= pmatch[1].rm_so)
len = pmatch[1].rm_eo - pmatch[1].rm_so;
memcpy(f, s + pmatch[1].rm_so, len);
if (pmatch[2].rm_eo > pmatch[2].rm_so) {
len = pmatch[2].rm_eo - pmatch[2].rm_so - 1;
memcpy(c, s + pmatch[2].rm_so + 1, len);
if (pmatch[3].rm_eo > pmatch[3].rm_so) {
len = pmatch[3].rm_eo - pmatch[3].rm_so;
memcpy(sopts, s + pmatch[3].rm_so, len);
regmatch_t pmatch;
pmatch.rm_so = 0;
pmatch.rm_eo = len - 1;
if (regexec(&rgx, bfr, 0, &pmatch, REG_STARTEND) == 0)