1 /*
2 * regset.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 int i, n;
12 int match_pos;
13 unsigned char *start, *range, *end;
14 OnigRegSet* set;
15 OnigRegSetLead lead;
16 regex_t* reg;
17 OnigErrorInfo einfo;
18 char ebuf[ONIG_MAX_ERROR_MESSAGE_LEN];
19 OnigEncoding use_encs[1];
20
21 static UChar* str = (UChar* )"aaaaaaaaaaaaaaaaaaaaaaca";
22
23 static char* pat[] = {
24 "a(.*)b|a(.)c",
25 "^(abc)",
26 "a(.....)c"
27 };
28
29 use_encs[0] = ONIG_ENCODING_UTF8;
30 onig_initialize(use_encs, sizeof(use_encs)/sizeof(use_encs[0]));
31
32 r = onig_regset_new(&set, 0, NULL);
33 if (r != ONIG_NORMAL) {
34 onig_error_code_to_str((UChar* )ebuf, r);
35 fprintf(stderr, "ERROR: %s\n", ebuf);
36 onig_end();
37 return -1;
38 }
39
40 n = sizeof(pat) / sizeof(pat[0]);
41
42 for (i = 0; i < n; i++) {
43 r = onig_new(®, (UChar* )pat[i], (UChar* )(pat[i] + strlen(pat[i])),
44 ONIG_OPTION_DEFAULT, ONIG_ENCODING_UTF8, ONIG_SYNTAX_DEFAULT,
45 &einfo);
46 if (r != ONIG_NORMAL) {
47 onig_error_code_to_str((UChar* )ebuf, r, &einfo);
48 fprintf(stderr, "ERROR: %s\n", ebuf);
49 onig_regset_free(set);
50 onig_end();
51 return -1;
52 }
53
54 r = onig_regset_add(set, reg);
55 if (r != ONIG_NORMAL) {
56 onig_free(reg);
57 onig_regset_free(set);
58 onig_end();
59 return -1;
60 }
61 }
62
63 end = str + strlen((char* )str);
64 start = str;
65 range = end;
66 lead = ONIG_REGSET_POSITION_LEAD;
67 //lead = ONIG_REGSET_PRIORITY_TO_REGEX_ORDER;
68 r = onig_regset_search(set, str, end, start, range, lead, ONIG_OPTION_NONE,
69 &match_pos);
70 if (r >= 0) {
71 OnigRegion *region;
72
73 fprintf(stderr, "match regex index: %d\n", r);
74 fprintf(stderr, "match position: %d\n", match_pos);
75
76 region = onig_regset_get_region(set, r);
77 for (i = 0; i < region->num_regs; i++) {
78 fprintf(stderr, "%d: (%d-%d)\n", i, region->beg[i], region->end[i]);
79 }
80 }
81 else if (r == ONIG_MISMATCH) {
82 fprintf(stderr, "search fail\n");
83 }
84 else { /* error */
85 onig_error_code_to_str((UChar* )ebuf, r);
86 fprintf(stderr, "ERROR: %s\n", ebuf);
87 onig_regset_free(set);
88 onig_end();
89 return -1;
90 }
91
92 onig_regset_free(set);
93 onig_end();
94 return 0;
95 }
96