]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
add opts to regex
authorAnthony Minessale <anthony.minessale@gmail.com>
Wed, 14 Nov 2007 14:18:24 +0000 (14:18 +0000)
committerAnthony Minessale <anthony.minessale@gmail.com>
Wed, 14 Nov 2007 14:18:24 +0000 (14:18 +0000)
git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@6254 d0543943-73ff-0310-b7d9-9358b9ac24b2

src/switch_regex.c

index 04bbe7d84c8f986bcfb57a4b42816ba2e0bea8fa..e1a2538d2fddf7b730a5af01362e9f1af504dd66 100644 (file)
@@ -61,20 +61,40 @@ SWITCH_DECLARE(int) switch_regex_perform(const char *field, const char *expressi
        int erroffset = 0;
        pcre *re = NULL;
        int match_count = 0;
+       char *tmp = NULL;
+       uint32_t flags = 0;
 
        if (!(field && expression)) {
                return 0;
        }
 
+       if (*expression == '/' && *(expression + (strlen(expression) - 1)) == '/') {
+               char *opts = NULL;
+               tmp = strdup(expression + 1);
+               assert(tmp);
+               if ((opts = strrchr(tmp, '/'))) {
+                       *opts++ = '\0';
+               }
+               expression = tmp;
+               if (opts) {
+                       if (strchr(opts, 'i')) {
+                               flags |= PCRE_CASELESS;
+                       }
+                       if (strchr(opts, 's')) {
+                               flags |= PCRE_DOTALL;
+                       }
+               }
+       }
+
        re = pcre_compile(expression,   /* the pattern */
-                                         0,            /* default options */
+                                         flags,                /* default options */
                                          &error,       /* for error message */
                                          &erroffset,   /* for error offset */
                                          NULL);        /* use default character tables */
        if (error) {
                switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "COMPILE ERROR: %d [%s]\n", erroffset, error);
                switch_regex_safe_free(re);
-               return 0;
+               goto end;
        }
 
        match_count = pcre_exec(re,     /* result of pcre_compile() */
@@ -93,6 +113,8 @@ SWITCH_DECLARE(int) switch_regex_perform(const char *field, const char *expressi
 
        *new_re = (switch_regex_t *) re;
 
+ end:
+       switch_safe_free(tmp);
        return match_count;
 }