1

我想打印匹配“字节”的子表达式。我已经简化了这个例子,所以我可以调试我的代码的其他组件:

char *bytes="[[:print:]]*\(bytes\)";
regex_t compiled;
regmatch_t matches[2];
char currentLine[512];

fgets(currentLine, 512, ifile);
regcomp(&compiled, bytes, REG_EXTENDED);
if(regexec(&compiled, currentLine, 2, matches, 0)==0){
    printf("%s\n", bytes+matches[1].rm_so);
}

在哪里

currentLine= "Free Memory: 5062026704 bytes (79%)";'

发生在 fgets 之后。

我收到的打印行是来自另一个函数的未格式化的 printf 语句——它在这个函数之后运行。对于我的问题可能出在哪里(正则表达式语法、内存分配、regmatch_t 的使用),我有一些不同的想法,而且我整个早上都在尝试不同的解决方案组合,但至今无济于事。

如何正确打印匹配的子字符串?

4

1 回答 1

0

Different problem but using some of the sample code from here I modified this line:

char *bytes="[[:print:]]*\(bytes\)";
                         ^      ^

to this:

char *bytes="[[:print:]]*(bytes)";
                        ^ 

and modified the print statements as follows:

printf("0: [%.*s]\n", matches[0].rm_eo - matches[0].rm_so, currentLine + matches[0].rm_so);
printf("1: [%.*s]\n", matches[1].rm_eo - matches[1].rm_so, currentLine + matches[1].rm_so);

The format string you may not have seen before but this thread covers it well.

于 2013-08-05T17:38:08.240 回答