|
Packit |
b89d10 |
/*
|
|
Packit |
b89d10 |
* posix.c
|
|
Packit |
b89d10 |
*/
|
|
Packit |
b89d10 |
#include <stdio.h>
|
|
Packit |
b89d10 |
#include "onigposix.h"
|
|
Packit |
b89d10 |
|
|
Packit |
b89d10 |
typedef unsigned char UChar;
|
|
Packit |
b89d10 |
|
|
Packit |
b89d10 |
static int x(regex_t* reg, unsigned char* pattern, unsigned char* str)
|
|
Packit |
b89d10 |
{
|
|
Packit |
b89d10 |
int r, i;
|
|
Packit |
b89d10 |
char buf[200];
|
|
Packit |
b89d10 |
regmatch_t pmatch[20];
|
|
Packit |
b89d10 |
|
|
Packit |
b89d10 |
r = regexec(reg, (char* )str, reg->re_nsub + 1, pmatch, 0);
|
|
Packit |
b89d10 |
if (r != 0 && r != REG_NOMATCH) {
|
|
Packit |
b89d10 |
regerror(r, reg, buf, sizeof(buf));
|
|
Packit |
b89d10 |
fprintf(stderr, "ERROR: %s\n", buf);
|
|
Packit |
b89d10 |
return -1;
|
|
Packit |
b89d10 |
}
|
|
Packit |
b89d10 |
|
|
Packit |
b89d10 |
if (r == REG_NOMATCH) {
|
|
Packit |
b89d10 |
fprintf(stderr, "FAIL: /%s/ '%s'\n", pattern, str);
|
|
Packit |
b89d10 |
}
|
|
Packit |
b89d10 |
else {
|
|
Packit |
b89d10 |
fprintf(stderr, "OK: /%s/ '%s'\n", pattern, str);
|
|
Packit |
b89d10 |
for (i = 0; i <= (int )reg->re_nsub; i++) {
|
|
Packit |
b89d10 |
fprintf(stderr, "%d: %d-%d\n", i, pmatch[i].rm_so, pmatch[i].rm_eo);
|
|
Packit |
b89d10 |
}
|
|
Packit |
b89d10 |
}
|
|
Packit |
b89d10 |
return 0;
|
|
Packit |
b89d10 |
}
|
|
Packit |
b89d10 |
|
|
Packit |
b89d10 |
extern int main(int argc, char* argv[])
|
|
Packit |
b89d10 |
{
|
|
Packit |
b89d10 |
int r;
|
|
Packit |
b89d10 |
char buf[200];
|
|
Packit |
b89d10 |
regex_t reg;
|
|
Packit |
b89d10 |
UChar* pattern;
|
|
Packit |
b89d10 |
|
|
Packit |
b89d10 |
reg_set_encoding(REG_POSIX_ENCODING_ASCII);
|
|
Packit |
b89d10 |
|
|
Packit |
b89d10 |
/* default syntax (ONIG_SYNTAX_ONIGURUMA) */
|
|
Packit |
b89d10 |
pattern = (UChar* )"^a+b{2,7}[c-f]?$|uuu";
|
|
Packit |
b89d10 |
r = regcomp(®, (char* )pattern, REG_EXTENDED);
|
|
Packit |
b89d10 |
if (r) {
|
|
Packit |
b89d10 |
regerror(r, ®, buf, sizeof(buf));
|
|
Packit |
b89d10 |
fprintf(stderr, "ERROR: %s\n", buf);
|
|
Packit |
b89d10 |
return -1;
|
|
Packit |
b89d10 |
}
|
|
Packit |
b89d10 |
x(®, pattern, (UChar* )"aaabbbbd");
|
|
Packit |
b89d10 |
|
|
Packit |
b89d10 |
/* POSIX Basic RE (REG_EXTENDED is not specified.) */
|
|
Packit |
b89d10 |
pattern = (UChar* )"^a+b{2,7}[c-f]?|uuu";
|
|
Packit |
b89d10 |
r = regcomp(®, (char* )pattern, 0);
|
|
Packit |
b89d10 |
if (r) {
|
|
Packit |
b89d10 |
regerror(r, ®, buf, sizeof(buf));
|
|
Packit |
b89d10 |
fprintf(stderr, "ERROR: %s\n", buf);
|
|
Packit |
b89d10 |
return -1;
|
|
Packit |
b89d10 |
}
|
|
Packit |
b89d10 |
x(®, pattern, (UChar* )"a+b{2,7}d?|uuu");
|
|
Packit |
b89d10 |
|
|
Packit |
b89d10 |
/* POSIX Basic RE (REG_EXTENDED is not specified.) */
|
|
Packit |
b89d10 |
pattern = (UChar* )"^a*b\\{2,7\\}\\([c-f]\\)$";
|
|
Packit |
b89d10 |
r = regcomp(®, (char* )pattern, 0);
|
|
Packit |
b89d10 |
if (r) {
|
|
Packit |
b89d10 |
regerror(r, ®, buf, sizeof(buf));
|
|
Packit |
b89d10 |
fprintf(stderr, "ERROR: %s\n", buf);
|
|
Packit |
b89d10 |
return -1;
|
|
Packit |
b89d10 |
}
|
|
Packit |
b89d10 |
x(®, pattern, (UChar* )"aaaabbbbbbd");
|
|
Packit |
b89d10 |
|
|
Packit |
b89d10 |
/* POSIX Extended RE */
|
|
Packit |
b89d10 |
onig_set_default_syntax(ONIG_SYNTAX_POSIX_EXTENDED);
|
|
Packit |
b89d10 |
pattern = (UChar* )"^a+b{2,7}[c-f]?)$|uuu";
|
|
Packit |
b89d10 |
r = regcomp(®, (char* )pattern, REG_EXTENDED);
|
|
Packit |
b89d10 |
if (r) {
|
|
Packit |
b89d10 |
regerror(r, ®, buf, sizeof(buf));
|
|
Packit |
b89d10 |
fprintf(stderr, "ERROR: %s\n", buf);
|
|
Packit |
b89d10 |
return -1;
|
|
Packit |
b89d10 |
}
|
|
Packit |
b89d10 |
x(®, pattern, (UChar* )"aaabbbbd)");
|
|
Packit |
b89d10 |
|
|
Packit |
b89d10 |
pattern = (UChar* )"^b.";
|
|
Packit |
b89d10 |
r = regcomp(®, (char* )pattern, REG_EXTENDED | REG_NEWLINE);
|
|
Packit |
b89d10 |
if (r) {
|
|
Packit |
b89d10 |
regerror(r, ®, buf, sizeof(buf));
|
|
Packit |
b89d10 |
fprintf(stderr, "ERROR: %s\n", buf);
|
|
Packit |
b89d10 |
return -1;
|
|
Packit |
b89d10 |
}
|
|
Packit |
b89d10 |
x(®, pattern, (UChar* )"a\nb\n");
|
|
Packit |
b89d10 |
|
|
Packit |
b89d10 |
regfree(®);
|
|
Packit |
b89d10 |
onig_end();
|
|
Packit |
b89d10 |
return 0;
|
|
Packit |
b89d10 |
}
|