|
|
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.