gpt4 book ai didi

c - 使用正则表达式 "regexec"执行函数\".*?\"时出现段错误 (?!')

转载 作者:行者123 更新时间:2023-11-30 19:00:36 24 4
gpt4 key购买 nike

这是我的代码:

#include <regex.h>
#include <string.h>

char solveRegExpress(const char *pcCommand,const char* pPattern,regmatch_t* pMatch)
{
int uFlags = REG_EXTENDED | REG_ICASE;
int uStatus = 0;
const size_t Nmatch = 1;
regex_t tRegExpress;
regmatch_t Tmatch[20];


regcomp(&tRegExpress ,pPattern,(int)uFlags);
uStatus = regexec(&tRegExpress,pcCommand,Nmatch,Tmatch,0);
if(0 == uStatus)
{
if(tRegExpress.re_nsub>1)
{
if(pMatch!=nullptr)
{
pMatch->rm_so = Tmatch->rm_so;
pMatch->rm_eo = Tmatch->rm_eo;
}
regfree(&tRegExpress);
return 3;
}
if(pMatch!=nullptr)
{
pMatch->rm_so = Tmatch->rm_so;
pMatch->rm_eo = Tmatch->rm_eo;
}
regfree(&tRegExpress);
return 0;
}
else
{
regfree(&tRegExpress);
return 1;
}
}

char checkForStrSign(char* pcStr,int* endPos)
{
regmatch_t sGmatch ;
memset(&sGmatch,0,sizeof (sGmatch));
if( 1 == solveRegExpress(pcStr,"\".*?\"(?!')",&sGmatch))
{
return 1;
}
*endPos = (int)sGmatch.rm_eo;
return 0;
}


int main(int argc, char *argv[])
{
int pos;
checkForStrSign("str1<<\"str2\"<<str3",&pos);

return 0;
}

看来\".*?\"(?!')的正则表达式导致这个问题,因为我用正则表达式 \".*?\" 修复了这个错误。现在我不知道如何在c语言中使用(?!)模式。段错误和该模式有何关系。帮助我

最佳答案

您需要检查 regcomp 的返回代码。永远不要假设标准库函数返回成功,特别是当您以前没有使用过该函数时。

Posix 正则表达式不实现非贪婪重复或先行断言。因此 regcomp 可能会提示 (?。尝试使用 man 7 regex 获取受支持的正则表达式组件的完整列表。另请参阅 regerror 函数(记录在 man 3 regex 中),用于将错误状态转换为(有点)有意义的消息。

关于c - 使用正则表达式 "regexec"执行函数\".*?\"时出现段错误 (?!'),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59351604/

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