1 /*
2 * posix.c
3 */
4 #include <stdio.h>
5 #include "onigposix.h"
6
7 typedef unsigned char UChar;
8
x(regex_t * reg,unsigned char * pattern,unsigned char * str)9 static int x(regex_t* reg, unsigned char* pattern, unsigned char* str)
10 {
11 int r, i;
12 char buf[200];
13 regmatch_t pmatch[20];
14
15 r = regexec(reg, (char* )str, reg->re_nsub + 1, pmatch, 0);
16 if (r != 0 && r != REG_NOMATCH) {
17 regerror(r, reg, buf, sizeof(buf));
18 fprintf(stderr, "ERROR: %s\n", buf);
19 regfree(reg);
20 return -1;
21 }
22
23 if (r == REG_NOMATCH) {
24 fprintf(stderr, "FAIL: /%s/ '%s'\n", pattern, str);
25 }
26 else {
27 fprintf(stderr, "OK: /%s/ '%s'\n", pattern, str);
28 for (i = 0; i <= (int )reg->re_nsub; i++) {
29 fprintf(stderr, "%d: %d-%d\n", i, pmatch[i].rm_so, pmatch[i].rm_eo);
30 }
31 }
32 regfree(reg);
33 return 0;
34 }
35
main(int argc,char * argv[])36 extern int main(int argc, char* argv[])
37 {
38 int r;
39 char buf[200];
40 regex_t reg;
41 UChar* pattern;
42
43 reg_set_encoding(REG_POSIX_ENCODING_ASCII);
44
45 /* default syntax (ONIG_SYNTAX_ONIGURUMA) */
46 pattern = (UChar* )"^a+b{2,7}[c-f]?$|uuu";
47 r = regcomp(®, (char* )pattern, REG_EXTENDED);
48 if (r) {
49 regerror(r, ®, buf, sizeof(buf));
50 fprintf(stderr, "ERROR: %s\n", buf);
51 regfree(®);
52 onig_end();
53 return -1;
54 }
55 x(®, pattern, (UChar* )"aaabbbbd");
56
57 /* POSIX Basic RE (REG_EXTENDED is not specified.) */
58 pattern = (UChar* )"^a+b{2,7}[c-f]?|uuu";
59 r = regcomp(®, (char* )pattern, 0);
60 if (r) {
61 regerror(r, ®, buf, sizeof(buf));
62 fprintf(stderr, "ERROR: %s\n", buf);
63 regfree(®);
64 onig_end();
65 return -1;
66 }
67 x(®, pattern, (UChar* )"a+b{2,7}d?|uuu");
68
69 /* POSIX Basic RE (REG_EXTENDED is not specified.) */
70 pattern = (UChar* )"^a*b\\{2,7\\}\\([c-f]\\)$";
71 r = regcomp(®, (char* )pattern, 0);
72 if (r) {
73 regerror(r, ®, buf, sizeof(buf));
74 fprintf(stderr, "ERROR: %s\n", buf);
75 regfree(®);
76 onig_end();
77 return -1;
78 }
79 x(®, pattern, (UChar* )"aaaabbbbbbd");
80
81 /* POSIX Extended RE */
82 onig_set_default_syntax(ONIG_SYNTAX_POSIX_EXTENDED);
83 pattern = (UChar* )"^a+b{2,7}[c-f]?)$|uuu";
84 r = regcomp(®, (char* )pattern, REG_EXTENDED);
85 if (r) {
86 regerror(r, ®, buf, sizeof(buf));
87 fprintf(stderr, "ERROR: %s\n", buf);
88 regfree(®);
89 onig_end();
90 return -1;
91 }
92 x(®, pattern, (UChar* )"aaabbbbd)");
93
94 pattern = (UChar* )"^b.";
95 r = regcomp(®, (char* )pattern, REG_EXTENDED | REG_NEWLINE);
96 if (r) {
97 regerror(r, ®, buf, sizeof(buf));
98 fprintf(stderr, "ERROR: %s\n", buf);
99 regfree(®);
100 onig_end();
101 return -1;
102 }
103 x(®, pattern, (UChar* )"a\nb\n");
104
105 onig_end();
106 return 0;
107 }
108