9 scan_callback(int n, int r, OnigRegion* region, void* arg)
13 fprintf(stdout, "scan: %d\n", n);
15 fprintf(stdout, "match at %d\n", r);
16 for (i = 0; i < region->num_regs; i++) {
17 fprintf(stdout, "%d: (%d-%d)\n", i, region->beg[i], region->end[i]);
24 scan(regex_t* reg, unsigned char* str, unsigned char* end)
29 region = onig_region_new();
31 r = onig_scan(reg, str, end, region, ONIG_OPTION_NONE, scan_callback, NULL);
33 fprintf(stdout, "total: %d match\n", r);
36 char s[ONIG_MAX_ERROR_MESSAGE_LEN];
37 onig_error_code_to_str((OnigUChar* )s, r);
38 fprintf(stderr, "ERROR: %s\n", s);
42 onig_region_free(region, 1 /* 1:free self, 0:free contents only */);
47 exec(OnigEncoding enc, OnigOptionType options, char* apattern, char* astr)
54 UChar* pattern = (UChar* )apattern;
55 UChar* str = (UChar* )astr;
57 onig_initialize(&enc, 1);
59 pattern_end = pattern + onigenc_str_bytelen_null(enc, pattern);
61 r = onig_new(®, pattern, pattern_end, options, enc, ONIG_SYNTAX_DEFAULT, &einfo);
62 if (r != ONIG_NORMAL) {
63 char s[ONIG_MAX_ERROR_MESSAGE_LEN];
64 onig_error_code_to_str((OnigUChar* )s, r, &einfo);
65 fprintf(stderr, "ERROR: %s\n", s);
69 end = str + onigenc_str_bytelen_null(enc, str);
70 r = scan(reg, str, end);
78 extern int main(int argc, char* argv[])
80 exec(ONIG_ENCODING_UTF8, ONIG_OPTION_NONE,
81 "\\Ga+\\s*", "a aa aaa baaa");
83 fprintf(stdout, "\n");
84 exec(ONIG_ENCODING_UTF8, ONIG_OPTION_NONE,
85 "a+\\s*", "a aa aaa baaa");