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(&reg, 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