अब जब मैं जैसे, str में सभी मैच पदों लौटना चाहते:पॉज़िक्स सी में regexec() क्यों पहले मैच को वापस लौटाता है, यह केवल एक बार दौड़ने के लिए सभी मैच पदों को कैसे वापस कर सकता है?
abcd123abcd123abcd
मान लीजिए मैं सभी "एबीसीडी" प्राप्त करना चाहते हैं, मैं, regexec() का उपयोग करना चाहिए पहले की स्थिति प्राप्त: 0, 3, तो मैं का उपयोग करेगा:
123abcd123abcd
नया स्ट्रिंग के रूप में regexec) फिर से उपयोग करने के लिए (, और इतने पर। मैं के बारे में मैनुअल पढ़ने regexec(), यह कहते हैं:
int regexec(const regex_t *preg, const char *string, size_t nmatch,
regmatch_t pmatch[], int eflags);
nmatch and pmatch are used to provide information regarding the location of any
matches.
लेकिन क्यों यह काम नहीं करता है? यह मेरा कोड है:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <regex.h>
int main(int argc, char **argv)
{
int i = 0;
int res;
int len;
char result[BUFSIZ];
char err_buf[BUFSIZ];
char* src = argv[1];
const char* pattern = "\\<[^,;]+\\>";
regex_t preg;
regmatch_t pmatch[10];
if((res = regcomp(&preg, pattern, REG_EXTENDED)) != 0)
{
regerror(res, &preg, err_buf, BUFSIZ);
printf("regcomp: %s\n", err_buf);
exit(res);
}
res = regexec(&preg, src, 10, pmatch, REG_NOTBOL);
//~ res = regexec(&preg, src, 10, pmatch, 0);
//~ res = regexec(&preg, src, 10, pmatch, REG_NOTEOL);
if(res == REG_NOMATCH)
{
printf("NO match\n");
exit(0);
}
for (i = 0; pmatch[i].rm_so != -1; i++)
{
len = pmatch[i].rm_eo - pmatch[i].rm_so;
memcpy(result, src + pmatch[i].rm_so, len);
result[len] = 0;
printf("num %d: '%s'\n", i, result);
}
regfree(&preg);
return 0;
}
./regex 'hello, world'
उत्पादन: मेरे सम्मान आउटपुट
num 0: 'hello'
यह है:
num 0: 'hello'
num 1: 'world'
हमें दिखाती है कि आप कैसे regexec कहते हैं। –