1 /*
2 * simple.c
3 */
4 #include <stdio.h>
5 #include <string.h>
6 #include "oniguruma.h"
7
main(int argc,char * argv[])8 extern int main(int argc, char* argv[])
9 {
10 int r;
11 unsigned char *start, *range, *end;
12 regex_t* reg;
13 OnigErrorInfo einfo;
14 OnigRegion *region;
15 OnigEncoding use_encs[1];
16
17 static UChar* pattern = (UChar* )"a(.*)b|[e-f]+";
18 static UChar* str = (UChar* )"zzzzaffffffffb";
19
20 use_encs[0] = ONIG_ENCODING_ASCII;
21 onig_initialize(use_encs, sizeof(use_encs)/sizeof(use_encs[0]));
22
23 r = onig_new(®, pattern, pattern + strlen((char* )pattern),
24 ONIG_OPTION_DEFAULT, ONIG_ENCODING_ASCII, ONIG_SYNTAX_DEFAULT, &einfo);
25 if (r != ONIG_NORMAL) {
26 char s[ONIG_MAX_ERROR_MESSAGE_LEN];
27 onig_error_code_to_str((UChar* )s, r, &einfo);
28 fprintf(stderr, "ERROR: %s\n", s);
29 return -1;
30 }
31
32 region = onig_region_new();
33
34 end = str + strlen((char* )str);
35 start = str;
36 range = end;
37 r = onig_search(reg, str, end, start, range, region, ONIG_OPTION_NONE);
38 if (r >= 0) {
39 int i;
40
41 fprintf(stderr, "match at %d\n", r);
42 for (i = 0; i < region->num_regs; i++) {
43 fprintf(stderr, "%d: (%d-%d)\n", i, region->beg[i], region->end[i]);
44 }
45 }
46 else if (r == ONIG_MISMATCH) {
47 fprintf(stderr, "search fail\n");
48 }
49 else { /* error */
50 char s[ONIG_MAX_ERROR_MESSAGE_LEN];
51 onig_error_code_to_str((UChar* )s, r);
52 fprintf(stderr, "ERROR: %s\n", s);
53 onig_region_free(region, 1 /* 1:free self, 0:free contents only */);
54 onig_free(reg);
55 onig_end();
56 return -1;
57 }
58
59 onig_region_free(region, 1 /* 1:free self, 0:free contents only */);
60 onig_free(reg);
61 onig_end();
62 return 0;
63 }
64