Мне нужно извлечь только второй сегмент пути 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
.