gpt4 book ai didi

c - 无法匹配 C 中的正则表达式

转载 作者:行者123 更新时间:2023-12-01 12:23:52 26 4
gpt4 key购买 nike

我有以下正则表达式的问题:

 prefix:\w+,\w+,\s*-?[0-9]{1,4}\s*,\s*-?[0-9]{1,4}\s*,\s*-?[0-9]{1,4}\s*,(?:\w+)

匹配字符串如下:
prefix:string,string,-100,100,0,string

我无法在我的 C 代码中匹配这个字符串。至少我在一些网上成功匹配了 tool我生成这个正则表达式的地方。还有关于正则表达式中“\”字符的编译警告,所以我按照 c-compiler-warning-unknown-escape-sequence-using-regex-for-c-program 中的解释替换了它。 .编译警告修复后的正则表达式:
prefix:\\w+,\\w+,\\s*-?[0-9]{1,4}\\s*,\\s*-?[0-9]{1,4}\\s*,\\s*-?[0-9]{1,4}\\s*,(?:\\w+)

下面是测试代码:
#include <stdio.h>
#include <regex.h>
#include <stdlib.h>

#define REGEX "prefix:\\w+,\\w+,\\s*-?[0-9]{1,4}\\s*,\\s*-?[0-9]{1,4}\\s*,\\s*-?[0-9]{1,4}\\s*,(?:\\w+)"

const char *input = "prefix:string,string,-100,100,0,string";
int main(){

int rc;

regex_t regex;

rc = regcomp(&regex, REGEX, 0);
if (rc != 0) {
fprintf(stderr, "Could not compile regex\n");
exit(1);
}

rc = regexec(&regex, input, 0, NULL, 0);
if (rc == 0) {
printf("Match!\n");
return 0;
}
else if (rc == REG_NOMATCH) {
printf("No match\n");
return -1;
}
else {
perror("Error\n");
exit(1);
}

return 0;
}

我使用 gcc 版本 6.2.0 20161005 (Ubuntu 6.2.0-5ubuntu12)

最佳答案

你需要做两件事:

  • 使用 REG_EXTENDED标志来编译正则表达式(以便启用扩展正则表达式风格(ERE)),否则限制量词将需要转义,并且可能存在其他潜在问题
  • 删除非捕获组 (?:...)因为 POSIX 不支持这种结构。
  • 使\w+可选,只需替换 (?:\w+)\w* .


  • #define REGEX "prefix:\\w+,\\w+,\\s*-?[0-9]{1,4}\\s*,\\s*-?[0-9]{1,4}\\s*,\\s*-?[0-9]{1,4}\\s*,\\w*"
    ^^^

    进而
    rc = regcomp(&regex, REGEX, REG_EXTENDED);
    ^^^^^^^^^^^^

    C demo .

    另外,请参阅有关 Extended Regular Expressions 的更多信息由 REG_EXTENDED 启用, 和 POSIX Bracket Expressions也是了解 BRE(基本正则表达式)和 ERE 风格之间差异的好资源。

    关于c - 无法匹配 C 中的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41740157/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com