diff options
Diffstat (limited to 'ext/mbstring/oniguruma/sample/posix.c')
-rw-r--r-- | ext/mbstring/oniguruma/sample/posix.c | 92 |
1 files changed, 92 insertions, 0 deletions
diff --git a/ext/mbstring/oniguruma/sample/posix.c b/ext/mbstring/oniguruma/sample/posix.c new file mode 100644 index 0000000000..ff20292cb0 --- /dev/null +++ b/ext/mbstring/oniguruma/sample/posix.c @@ -0,0 +1,92 @@ +/* + * posix.c + */ +#include<stdio.h> +#include "onigposix.h" + +static int x(regex_t* reg, unsigned char* pattern, unsigned char* str) +{ + int r, i; + char buf[200]; + regmatch_t pmatch[20]; + + r = regexec(reg, str, reg->re_nsub + 1, pmatch, 0); + if (r != 0 && r != REG_NOMATCH) { + regerror(r, reg, buf, sizeof(buf)); + fprintf(stderr, "ERROR: %s\n", buf); + exit(-1); + } + + if (r == REG_NOMATCH) { + fprintf(stderr, "FAIL: /%s/ '%s'\n", pattern, str); + } + else { + fprintf(stderr, "OK: /%s/ '%s'\n", pattern, str); + for (i = 0; i <= reg->re_nsub; i++) { + fprintf(stderr, "%d: %d-%d\n", i, pmatch[i].rm_so, pmatch[i].rm_eo); + } + } + return 0; +} + +extern int main(int argc, char* argv[]) +{ + int r; + char buf[200]; + regex_t reg; + unsigned char* pattern; + + /* default syntax (REG_SYNTAX_RUBY) */ + pattern = "^a+b{2,7}[c-f]?$|uuu"; + r = regcomp(®, pattern, REG_EXTENDED); + if (r) { + regerror(r, ®, buf, sizeof(buf)); + fprintf(stderr, "ERROR: %s\n", buf); + exit(-1); + } + x(®, pattern, "aaabbbbd"); + + /* POSIX Basic RE (REG_EXTENDED is not specified.) */ + pattern = "^a+b{2,7}[c-f]?|uuu"; + r = regcomp(®, pattern, 0); + if (r) { + regerror(r, ®, buf, sizeof(buf)); + fprintf(stderr, "ERROR: %s\n", buf); + exit(-1); + } + x(®, pattern, "a+b{2,7}d?|uuu"); + + /* POSIX Basic RE (REG_EXTENDED is not specified.) */ + pattern = "^a*b\\{2,7\\}\\([c-f]\\)$"; + r = regcomp(®, pattern, 0); + if (r) { + regerror(r, ®, buf, sizeof(buf)); + fprintf(stderr, "ERROR: %s\n", buf); + exit(-1); + } + x(®, pattern, "aaaabbbbbbd"); + + /* POSIX Extended RE */ + regex_set_default_syntax(REG_SYNTAX_POSIX_EXTENDED); + pattern = "^a+b{2,7}[c-f]?)$|uuu"; + r = regcomp(®, pattern, REG_EXTENDED); + if (r) { + regerror(r, ®, buf, sizeof(buf)); + fprintf(stderr, "ERROR: %s\n", buf); + exit(-1); + } + x(®, pattern, "aaabbbbd)"); + + pattern = "^b."; + r = regcomp(®, pattern, REG_EXTENDED | REG_NEWLINE); + if (r) { + regerror(r, ®, buf, sizeof(buf)); + fprintf(stderr, "ERROR: %s\n", buf); + exit(-1); + } + x(®, pattern, "a\nb\n"); + + regfree(®); + regex_end(); + return 0; +} |