gpt4 book ai didi

C 正则表达式库代码帮助

转载 作者:太空宇宙 更新时间:2023-11-04 04:06:06 25 4
gpt4 key购买 nike

我正在试用 C RegEx 库。这是我为测试示例模式和字符串而编写的代码。但是,这只会为每个字符串打印出一个模式。例如,在这种情况下,当我运行代码时,它只打印出“asd f g”。它不识别“xty y z”。我的代码有什么问题,或者我对图书馆工作原理的理解有什么根本性的错误吗?我们将不胜感激。

int main(int argc, char **argv)
{
regmatch_t arr[10];
regex_t *reg=malloc(sizeof(regex_t));
char *str="\t\t asd f g \t =\t\t xty y z \t \t";

if(regcomp(reg,"[a-z][a-z ]*",REG_EXTENDED | REG_NEWLINE))
printf("Unsuccessful Compilation\n");
int i,j;
int status=regexec(reg,str,10,arr,0);
if(status)
{
printf("Match Not Found\n");
return;
}
else
printf("Match found\n");

for(i=0;i<10;i++)
{
if(arr[i].rm_so!=-1)
{
j=arr[i].rm_so;
printf(":");
while(j<arr[i].rm_eo)
{
printf("%c",str[j]);
j++;
}
printf(":\nNewline\n");
}
}
return 0;
}

最佳答案

我认为你误解了 arr 的作用。 arr[0] 包含匹配项,arr[1] 及以后将包含您匹配的子表达式(括号内的)的匹配项。 regexec 只会匹配一次,你需要在一个循环中重复它,在 regexec 匹配 0 时继续,例如,开始下一个比 rm_so 更远的匹配上一场比赛。然后您只需要 arr 数组中的一个元素,因为您没有嵌套表达式。

但是例如如果你想匹配等号的两边,你可以使用正则表达式 ([a-z][a-z ]*).*=.*([a-z][a-z ]*) 然后一个匹配 arr[0] 将是一个描述整个匹配的结构,而 arr[1] 将是一个描述 = 符号和 arr[ 之前的结构2] 后一个(括号中的子表达式)。所以如果你只想匹配行作为例子,你可以有效地使用子表达式。

关于C 正则表达式库代码帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5727335/

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