我只需要提取URI的第二个路径段,即给出以下URI:
/first/second/third/fourth/...
正则表达式应该从URI中提取second
字符串。对解决方案正则表达式的解释将不胜感激。
我正在使用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
的结果相同。
答案 0 :(得分:2)
如果您只是拥有绝对URI路径,那么这个正则表达式应该这样做:
^/[^/]+/([^/]*)
解释:
^/
匹配字符串的开头,后跟文字/
[^/]+/
匹配除/
以外的一个或多个字符,后跟文字/
([^/]*)
匹配除/
以外的零个或多个字符。然后第二个路径段由第一个组匹配。我使用+
作为第一个,*
作为第二个,因为如果第一个也允许零长度,它将不再是绝对路径,而是无方案URI。