|
|
1.1 ! root 1: #include "Regexp.h" ! 2: ! 3: Regexp::Regexp(const char *p) ! 4: { ! 5: prog = regcomp(p); ! 6: for (int i=0; i<NSUBEXP; i++) offset[i] = len[i] = -1; ! 7: } ! 8: ! 9: Regexp::Regexp(const String& s1) ! 10: { ! 11: const String x1 = s1 + (char)0; ! 12: prog = regcomp(x1.d->start); ! 13: for (int i=0; i<NSUBEXP; i++) offset[i] = len[i] = -1; ! 14: } ! 15: ! 16: int ! 17: Regexp::exec(const String& s1) ! 18: { ! 19: subject = s1; ! 20: const String x1 = s1 + (char)0; ! 21: register char* p = x1.d->start; ! 22: if (!prog) return 0; ! 23: int ans = regexec(prog, p); ! 24: for (int i=0; i<NSUBEXP; i++) ! 25: if (prog->startp[i]) { ! 26: offset[i] = prog->startp[i] - p; ! 27: len[i] = prog->endp[i] - prog->startp[i]; ! 28: } else offset[i] = len[i] = -1; ! 29: return ans; ! 30: } ! 31: ! 32: int ! 33: Regexp::result(unsigned& start, unsigned& length, unsigned i) ! 34: { ! 35: if (i>=NSUBEXP || offset[i] == -1) return 0; ! 36: start = offset[i]; ! 37: length = len[i]; ! 38: return 1; ! 39: } ! 40: ! 41: extern void free(char *); // since prog is allocated by malloc() ! 42: ! 43: Regexp::~Regexp() ! 44: { ! 45: free((char *)prog); ! 46: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.