如何在纯C中进行正则表达式字符串替换?

我查看了POSIX正则表达式库和PCRE库中的正则表达式函数,但它们都没有字符串替换函数。 我不想使用C ++,如果我不需要链接另一个库(但我可以,如果必须的话),那将是最好的。 我需要手动更换字符串吗? 如果是这样,我该如何使用捕获组?

regex.h不提供对字符串替换的本机支持,但它确实提供了子表达式/捕获组,使其更容易。 我假设您熟悉正则表达式编译并跳过正则表达式执行和子表达式。

regexec()在regex.h中定义如下(/ usr / include /):

extern int regexec (const regex_t *__restrict __preg, const char *__restrict __string, size_t __nmatch, regmatch_t __pmatch[__restrict_arr], int __eflags); 

第一个,第二个和最后一个参数分别是正则表达式,要执行的字符串和执行标志。 第三个和第四个参数用于指定regmatch_t的数组。 regmatch_t由两个字段组成:rm_so和rm_eo,它们分别是匹配区域的开始和结束的索引或偏移。 然后可以将这些索引与来自string.h的memcpy() , memset()和memmove()一起使用来执行字符串替换。

我将做一个小例子并稍后发布。

祝你好运,我希望这有所帮助。

PCRE库本身不提供替换function,但PCRE下载页面提供了一个包装函数,它接受perl style =~ s/pattern/replace/ syntax,然后使用PCRE本机函数替换/替换您。 转到http://www.pcre.org/然后单击下载链接: ftp : //ftp.csx.cam.ac.uk/pub/software/programming/pcre/ ,然后单击Contrib目录。 你想要的包/项目是: pcrs-0.0.3-src.tar.gz

请注意,我自己没有使用过这个,所以我无法certificate它的效果如何。 然而,它是一个相当小而简单的代码,所以它可以很好地满足您的目的。