c - 正则表达式末尾需要一个额外的空格

标签 c regex

考虑这段代码:

#include <pcre.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main(int argc, char **argv) {
    char **ret = NULL, **t;
    char *buffer;
    pcre *re;
    const char *error;
    int erroffset, rc = 1, arraylength = 0, ovector[2], i = 0;

    const char *string = "WORD";
    buffer = malloc(strlen(string)+1);

    re = pcre_compile("[A-Za-z0-9]+|\\\"[A-Za-z0-9\\s\\.'\\?]+\\\"", PCRE_MULTILINE,  &error,  &erroffset,  NULL);
    if (re == NULL ) printf ("pcre_compile error: %s\n", error);

    while (rc > 0) {
        rc = pcre_exec(re, NULL, string, strlen(string),  i,  0,  ovector, 2);
        bzero(buffer, strlen(string));
        pcre_copy_substring(string, ovector, rc, 0, buffer, strlen(string));

        if (rc > 0) {
            printf("BUFFER: %s\n", buffer);
        }
        i = ovector[1];
    }

    return 0;
}

这个的输出是:

[bart@localhost tests]$ ./pcre 
BUFFER: 

我希望得到 WORD。当我在 WORD 之后添加一个空白字符时:

const char *string = "WORD ";

它确实有效:

[bart@localhost tests]$ ./pcre 
BUFFER: WORD

此外,当我添加更多单词时,它会起作用。

我尝试测试我的正则表达式 here ,它告诉我它应该在没有空白字符的情况下工作。

我在这里错过了什么?

更新 当我将正则表达式更改为 [A-Za-z0-9]+ 时,如果没有空格,它仍然无法工作。

最佳答案

问题出在pcre_copy_substring,缓冲区太小。这:

pcre_copy_substring(string, ovector, rc, 0, buffer, strlen(string)+1);

修复它。

关于c - 正则表达式末尾需要一个额外的空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47250620/

相关文章:

编译时 float 打包/双关语

javascript - 如何检查url字符串javascript中是否存在url方案

c - Pipeline和Tail命令在C语言中应该如何实现?

c - 这个宏在这种情况下如何工作?

Javascript 正则表达式模式捕获 - 所有可能的组合

regex - 如何在 Notepad++ 中替换组的正则表达式

c# - 正则表达式在特定单词后立即查找单词

regex - 这个空白藏在哪里?

c - 如何使用 ia16-elf-g++ 编译器生成 fpu 代码(未模拟)?

c++ - 关于atexit的三个问题