gpt4 book ai didi

c - C 中的正则表达式匹配和打印

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

我有这样的文件行:

{123}   {12.3.2015 moday}    {THIS IS A TEST}

是否可以获取方括号 {} 之间的每个值并插入到数组中?

我也想知道这个问题是否有其他解决方案...

变成这样:

array( 123,
'12.3.2015 moday',
'THIS IS A TEST'
)

我的尝试:

  int r;
regex_t reg;
regmatch_t match[2];
char *line = "{123} {12.3.2015 moday} {THIS IS A TEST}";

regcomp(&reg, "[{](.*?)*[}]", REG_ICASE | REG_EXTENDED);

r = regexec(&reg, line, 2, match, 0);
if (r == 0) {
printf("Match!\n");
printf("0: [%.*s]\n", match[0].rm_eo - match[0].rm_so, line + match[0].rm_so);
printf("1: %.*s\n", match[1].rm_eo - match[1].rm_so, line + match[1].rm_so);
} else {
printf("NO match!\n");
}

这将导致:

123}   {12.3.2015 moday}    {THIS IS A TEST

有人知道如何改进吗?

最佳答案

为了帮助您,您可以使用 regex101非常有用的网站。

那么我建议你使用这个正则表达式:

/(?<=\{).*?(?=\})/g

或者这些中的任何一个:

/\{\K.*?(?=\})/g
/\{\K[^\}]+/g
/\{(.*?)\}/g

第一个也可以在这里找到:

https://regex101.com/r/bB6sE8/1

在 C 中,您可以从这个开始,这是 here 的示例:

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

int main ()
{
char * source = "{123} {12.3.2015 moday} {THIS IS A TEST}";
char * regexString = "{([^}]*)}";
size_t maxGroups = 10;

regex_t regexCompiled;
regmatch_t groupArray[10];
unsigned int m;
char * cursor;

if (regcomp(&regexCompiled, regexString, REG_EXTENDED))
{
printf("Could not compile regular expression.\n");
return 1;
};

cursor = source;
while (!regexec(&regexCompiled, cursor, 10, groupArray, 0))
{
unsigned int offset = 0;

if (groupArray[1].rm_so == -1)
break; // No more groups

offset = groupArray[1].rm_eo;
char cursorCopy[strlen(cursor) + 1];
strcpy(cursorCopy, cursor);
cursorCopy[groupArray[1].rm_eo] = 0;
printf("%s\n", cursorCopy + groupArray[1].rm_so);
cursor += offset;
}
regfree(&regexCompiled);
return 0;
}

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

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