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(&reg, (char* )pattern, REG_EXTENDED);
48   if (r) {
49     regerror(r, &reg, buf, sizeof(buf));
50     fprintf(stderr, "ERROR: %s\n", buf);
51     regfree(&reg);
52     onig_end();
53     return -1;
54   }
55   x(&reg, 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(&reg, (char* )pattern, 0);
60   if (r) {
61     regerror(r, &reg, buf, sizeof(buf));
62     fprintf(stderr, "ERROR: %s\n", buf);
63     regfree(&reg);
64     onig_end();
65     return -1;
66   }
67   x(&reg, 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(&reg, (char* )pattern, 0);
72   if (r) {
73     regerror(r, &reg, buf, sizeof(buf));
74     fprintf(stderr, "ERROR: %s\n", buf);
75     regfree(&reg);
76     onig_end();
77     return -1;
78   }
79   x(&reg, 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(&reg, (char* )pattern, REG_EXTENDED);
85   if (r) {
86     regerror(r, &reg, buf, sizeof(buf));
87     fprintf(stderr, "ERROR: %s\n", buf);
88     regfree(&reg);
89     onig_end();
90     return -1;
91   }
92   x(&reg, pattern, (UChar* )"aaabbbbd)");
93 
94   pattern = (UChar* )"^b.";
95   r = regcomp(&reg, (char* )pattern, REG_EXTENDED | REG_NEWLINE);
96   if (r) {
97     regerror(r, &reg, buf, sizeof(buf));
98     fprintf(stderr, "ERROR: %s\n", buf);
99     regfree(&reg);
100     onig_end();
101     return -1;
102   }
103   x(&reg, pattern, (UChar* )"a\nb\n");
104 
105   onig_end();
106   return 0;
107 }
108