代码之家  ›  专栏  ›  技术社区  ›  Suresh Kumar

提取URI的第二个路径段的正则表达式是什么?

  •  1
  • Suresh Kumar  · 技术社区  · 14 年前

    /first/second/third/fourth/...
    

    正则表达式应该提取 second 来自URI的字符串。请解释一下解决方案regex。

    编辑: Gumbo给出的解决方案在 REtester

    但是,它似乎不适用于下面的代码:

    #include "regex.h"
    char *regexp (const char *string, const char *patrn, int *begin, int *end){     
            int i, w=0, len;                  
            char *word = NULL;
            regex_t rgT;
            regmatch_t match;
            wsregcomp(&rgT,patrn,REG_EXTENDED);
            if ((wsregexec(&rgT,string,1,&match,0)) == 0) {
                    *begin = (int)match.rm_so;
                    *end = (int)match.rm_eo;
                    len = *end-*begin;
                    word = (char*) malloc(len+1);
                    for (i=*begin; i<*end; i++) {
                            word[w] = string[i];
                            w++; }
                    word[w]=0;
            }
            wsregfree(&rgT);
            return word;
    }
    
    int main(){
        int begin = 0;
        int end = 0;
    
        char *word = regexp("/first/second/third","^/[^/]+/([^/]*)",&begin,&end);
        printf("ENV %s\n",word);
    }
    

    /first/second 而不仅仅是 第二

    编辑2: 结果与相同 java.util.regex

    1 回复  |  直到 14 年前
        1
  •  2
  •   Gumbo    14 年前

    如果您只是有一个绝对的URI路径,那么这个正则表达式应该做到这一点:

    ^/[^/]+/([^/]*)
    

    一个解释:

    • ^/ /
    • [^/]+/ 匹配一个或多个字符,但 ,后跟文字 /
    • ([^/]*) / .

    然后第一组匹配第二路径段。我用过 + * 对于第二个,因为如果第一个也允许零长度,它将不再是一个绝对路径,而是一个无方案的URI。

    推荐文章