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

Yif*_*fan 13 c regex string

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

小智 23

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);
Run Code Online (Sandbox Code Playgroud)

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

我会做一个小例子并稍后发布.

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

  • *我会做一个小例子并稍后发布.*什么时候?你5年前就做出了这个承诺.;([这里](http://stackoverflow.com/questions/1085083/regular-expressions-in-c-examples)到目前为止我找到的几个例子. (6认同)

rid*_*ner 6

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

请注意,我自己没有使用过这个,所以我无法证明它的工作原理.然而,它是一个相当小而简单的代码,所以它可以很好地满足您的目的.