gpt4 book ai didi

c - C 中的 Posix 正则表达式

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:09:28 24 4
gpt4 key购买 nike

我正在处理这段代码,我必须编译一些正则表达式并在不同的字符串上多次使用这些编译版本。所以我决定创建一个函数,我可以通过这些编译版本来匹配字符串。我的问题是,当我在函数中传递编译版本时,它显示匹配但将 regmatch_t 结构字段设置为 0。但是,如果我在同一函数中使用它们,我会得到正确的结果。

void match_a(regex_t *a,char *str)
{
regmatch_t match_ptr;
size_t nmatch;
regexec(a,str,nmatch,&match_ptr,0);
}
int main()
{
regex_t a;
regmatch_t match_ptr;
size_t nmatch;
char *str="acbdsfs";
regcomp(&a,str,RE_EXTENDED);
match_a(&a,str);
}

这是代码的一般结构。请建议任何调试此程序的方法

最佳答案

我不确定您是否了解如何使用 regexecnmatch 参数告诉 regexec 您提供的 regmatch_t 对象的数量。您尚未初始化 nmatch 变量,因此它可能是任何不确定的值,这可能会在某个阶段导致崩溃,或者它可能是 0 在这种情况下regexec 函数定义为忽略 pmatch 参数。

如果你只想要一个 regmatch_t 结果,试试这个:

void match_a(regex_t *a,char *str)
{
regmatch_t match;
size_t nmatch = 1;

regexec(a, str, nmatch, &match, 0);
}

如果你想要最多 10 个 regmatch_t(对于带组的正则表达式等),试试这个:

void match_a(regex_t *a,char *str)
{
regmatch_t matches[10];
size_t nmatch = 10;

regexec(a, str, nmatch, matches, 0);
}

有关详细信息,请阅读 this documentation .

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

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