gpt4 book ai didi

c - 如何在 C 中轻松获得正则表达式选择?

转载 作者:太空狗 更新时间:2023-10-29 15:33:26 25 4
gpt4 key购买 nike

我将 regex.h (POSIX) 用于正则表达式。 C中有正则匹配的选择方法吗?

我可以很容易地检查正则表达式,但如果我需要检索匹配的值,我必须手动查找并存储它。

{{( )*(([[:alnum:]]+\\.)*)?[[:alnum:]]+( )*}}

此正则表达式查找双花括号中的任何变量匹配项。但我只需要字符串中最中心的项目。 如何在 C 中使用正则表达式检索值?

最佳答案

您需要传入一组 regmatch_t,正则表达式可以用匹配项的索引填充它们。使用单个命令行参数(要测试的字符串)尝试以下程序。

一旦你有了匹配项的索引,就应该很容易找出你想要的东西。 (注意:matches[0] 将匹配整个表达式,因此子表达式从 matches[1] 开始。)

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

int main(int argc, char* argv[])
{
const char* pattern = "{{( )*(([[:alnum:]]+\\.)*)?[[:alnum:]]+( )*}}";
regex_t rex;
int rc;

if ((rc = regcomp(&rex, pattern, REG_EXTENDED))) {
fprintf(stderr, "error %d compiling regex\n", rc);
/* retrieve error here with regerror */
return -1;
}

regmatch_t* matches = malloc(sizeof(regex_t) * (rex.re_nsub + 1));

if ((rc = regexec(&rex, argv[1], rex.re_nsub + 1, matches, 0))){
printf("no match\n");
/* error or no match */
} else {
for(int i = 0; i < rex.re_nsub; ++i) {
printf("match %d from index %d to %d: ", i, matches[i].rm_so,
matches[i].rm_eo);
for(int j = matches[i].rm_so; j < matches[i].rm_eo; ++j) {
printf("%c", argv[1][j]);
}
printf("\n");
}
}

free(matches);
regfree(&rex);

return 0;
}

关于c - 如何在 C 中轻松获得正则表达式选择?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10284582/

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