GNU regex是GNU提供的跨平台的POSIX 正则表达式库(C语言)。
我也是最近才接触这个相对于C /Java实现来说非常简陋,勉强够用的正则表达式库。
不算GNU提供的扩展函数,POSIX标准的regex库总共就4个函数regcomp
,regerror
,regexec
,regfree
,
以下以完整源码的方式调用以上函数完成对GNU regex library的基本测试。
gnuregex_test.c
详细解释参见源码中的注释
代码语言:javascript复制/************************************************************************/
/* gnuregex_test.c */
/* GNU Regex 测试 */
/* 测试 regcomp,regerror,regexec,regfree 函数的使用方式 */
/* author guyadong */
/************************************************************************/
#include <stdio.h>
#include <regex.h>
/** 输出字符串中指定范围的字符到控制台 */
void print_str(const char* input, size_t _start, size_t _end)
{
if (input)
{
for (size_t i = _start; i < _end; i)
{
printf("%c", input[i]);
}
}
}
int main() {
/** 待匹配字符串 */
const char* inputstr = "hello,welcome to my party";
/** regex 错误输出缓冲区 */
char regerrbuf[256];
regex_t reg;
/** 正则表达式 */
const char* pattern = "(we|par)([a-z] )";
printf("==GNU Regex Test==n");
printf("Pattern :%sn", pattern);
printf("Input String:%sn", inputstr);
/************************************************************************/
/* 编译正则表达式,编译成功的 regex_t 对象才可以被后续的 regexec 使用 */
/************************************************************************/
int c = regcomp(®, pattern, REG_EXTENDED);
if (0 != c)
{
/************************************************************************/
/* 正则表达式编译出错输出错误信息 */
/* 调用 regerror 将错误信息输出到 regerrbuf 中 */
/* regerrbuf 末尾置0,确保上面调用regerror 导致 regerrbuf 溢出的情况下, */
/* 字符串仍有有结尾0 */
/* 然后 printf 输出 */
/************************************************************************/
regerror(c, ®, regerrbuf, sizeof(regerrbuf));
regerrbuf[sizeof(regerrbuf) - 1] = '