我正在嘗試C RegEx庫。這是我爲測試示例模式和字符串而編寫的代碼。但是,這隻能打印出每個字符串的單個模式。例如,在這種情況下,當我運行代碼時,它只打印出「asd f g」。它不識別「xty y z」。 我的代碼有什麼問題,或者我對圖書館的工作原理有一些基本的錯誤。任何和所有的幫助,將不勝感激。C Reg Ex庫代碼幫助
int main(int argc, char **argv)
{
regmatch_t arr[10];
regex_t *reg=malloc(sizeof(regex_t));
char *str="\t\t asd f g \t =\t\t xty y z \t \t";
if(regcomp(reg,"[a-z][a-z ]*",REG_EXTENDED | REG_NEWLINE))
printf("Unsuccessful Compilation\n");
int i,j;
int status=regexec(reg,str,10,arr,0);
if(status)
{
printf("Match Not Found\n");
return;
}
else
printf("Match found\n");
for(i=0;i<10;i++)
{
if(arr[i].rm_so!=-1)
{
j=arr[i].rm_so;
printf(":");
while(j<arr[i].rm_eo)
{
printf("%c",str[j]);
j++;
}
printf(":\nNewline\n");
}
}
return 0;
}
我相信regexec必須多次調用,基本上它會停止在第一場比賽。 – ColWhi 2011-04-20 08:32:47
另外你需要在正則表達式上使用regfree()來避免內存泄漏。 – ColWhi 2011-04-20 08:38:53
@Sasquiha - 是的,多次調用regexec應該可以做到。雖然像Henno Brandsma在他的回答中提到,但我必須首次使用regexec匹配字符串,然後使用先前的rm_eo在上一個匹配的最後一個字符後修剪字符串,然後再次調用regexec,直到沒有更多的字符串留下或不再有匹配。 – Sandman 2011-04-20 10:35:33