что такое регулярное выражение для извлечения второго сегмента пути URI? - PullRequest
1 голос
/ 09 ноября 2010

Мне нужно извлечь только второй сегмент пути URI, т.е. учитывая следующий URI:

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

регулярное выражение должно извлечь строку second из URI.Мы будем очень благодарны за объяснение регулярного выражения решения.

Я использую библиотеку регулярных выражений жалоб POSIX.

РЕДАКТИРОВАТЬ: Решение, данное 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 вместо только second

EDIT2: Тот же результат, что и для java.util.regex.

1 Ответ

2 голосов
/ 09 ноября 2010

Если у вас просто абсолютный путь URI, тогда это должно сделать регулярное выражение:

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

Объяснение:

  • ^/ соответствует началу строки, за которым следует литерал /
  • [^/]+/ соответствует одному или нескольким символам, кроме /, за которым следует литерал /
  • ([^/]*) соответствует нулю или более символов, кроме /.

Второй сегмент пути сопоставляется с первой группой.Я использовал + для первого и * для второго, потому что, если первый также допускает нулевую длину, это будет уже не абсолютный путь, а URI без схемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...