c - 在 C 中匹配 POSIX 子串

标签 c regex pattern-matching posix

我想打印匹配“bytes”的子表达式。我已简化此示例,以便我可以调试代码的其他组件:

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 的使用),我有一些不同的想法,而且我整个上午都在尝试不同的解决方案组合,但到目前为止都无济于事。

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

最佳答案

不同的问题,但使用了 here 中的一些示例代码我修改了这一行:

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

为此:

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

并修改打印语句如下:

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);

你以前可能没有见过的格式字符串,但是这个 thread覆盖得很好。

关于c - 在 C 中匹配 POSIX 子串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18063370/

相关文章:

c - Valgrind 崩溃并给我这个无效的 realloc 警告

regex - Perl正则表达式匹配较长句子中的可选短语

android - 存储和比较 android 传感器(加速度计)数据集以匹配模式

r - 合并部分匹配的字符串

c - 在 Objective C 中使用 C 结构

c - 我如何知道正在传递多少参数

c - 来自用户输入的动态指针数组

python - 我应该如何为一位/两位数字序列编写 python 正则表达式?

regex - Excel VBA使用循环查找和替换字符串中的文本

regex - 正则表达式匹配 12345