我查看了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()一起使用来执行字符串替换.
我会做一个小例子并稍后发布.
祝你好运,我希望这有所帮助.
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.
请注意,我自己没有使用过这个,所以我无法证明它的工作原理.然而,它是一个相当小而简单的代码,所以它可以很好地满足您的目的.
| 归档时间: |
|
| 查看次数: |
10945 次 |
| 最近记录: |