gpt4 book ai didi

c - 使用 TRE 进行模糊正则表达式匹配

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

我正在尝试使用 the TRE library在我的 C 程序中执行模糊正则表达式搜索。我设法通过阅读文档拼凑了这段代码:

regex_t rx;
regcomp(&rx, "(January|February)", REG_EXTENDED);
int result = regexec(&rx, "January", 0, 0, 0);

但是,这只会匹配一个精确的正则表达式(即不允许出现拼写错误)。我没有看到任何允许在这些函数中设置模糊度的参数:

int regcomp(regex_t *preg, const char *regex, int cflags); 
int regexec(const regex_t *preg, const char *string, size_t nmatch,
regmatch_t pmatch[], int eflags);

如何设置模糊程度(即最大编辑距离),以及如何获得匹配的编辑距离?

编辑: 我忘了说我使用的是 GnuWin32 的 Windows 二进制文件,它仅适用于版本 0.7.5。 0.8.0 的二进制文件仅适用于 Linux。

最佳答案

感谢@Wiktor Stribiżew,我找到了我需要使用的函数,并且我已经成功编译了一个工作示例:

#include <stdio.h>
#include "regex.h"
int main() {
regex_t rx;
regcomp(&rx, "(January|February)", REG_EXTENDED);

regaparams_t params = { 0 };
params.cost_ins = 1;
params.cost_del = 1;
params.cost_subst = 1;
params.max_cost = 2;
params.max_del = 2;
params.max_ins = 2;
params.max_subst = 2;
params.max_err = 2;

regamatch_t match;
match.nmatch = 0;
match.pmatch = 0;

if (!regaexec(&rx, "Janvary", &match, params, 0)) {
printf("Levenshtein distance: %d\n", match.cost);
} else {
printf("Failed to match\n");
}

return 0;
}

关于c - 使用 TRE 进行模糊正则表达式匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35199079/

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