释放正则表达式
无论什么时候,当不再需要已经编译过的正则表达式时,都应该调用函数 regfree()将其
释放,以免产生内存泄漏。
void regfree(regex_t *preg);
函数 regfree()不会返回任何结果,它仅接收一个指向 regex_t 数据类型的指针,这是之
前调用 regcomp()
函数所得到的编译结果。
如果在程序中针对同一个 regex_t 结构调用了多次 regcomp()函数,POSIX 标准并没有
规定是否每次都必须调用 regfree()函数进行释放,但建议每次调用 regcomp()函数对
正则表达式进行编译后都调用一次 regfree()
函数,以尽早释放占用的存储空间。
报告错误信息
如果调用函数 regcomp()或 regexec()得到的是一个非 0 的返回值,则表明在对正则表
达式的处理过程中出现了某种错误,此时可以通过调用函数 regerror()得到详细的错误
信息。
size_t regerror(int errcode,
const regex_t *preg, char *errbuf,
size_t errbuf_size);
参数 errcode 是来自函数 regcomp()或 regexec()的错误代码,而参数 preg 则是由函
数 regcomp() 得 到 的 编 译 结 果 , 其 目 的 是 把 格 式 化 消 息 所 必 须 的 上 下 文 提 供 给
regerror()函数。在执行函数 regerror()时,将按照参数 errbuf_size 指明的最大字节数,
在 errbuf
缓冲区中填入格式化后的错误信息,同时返回错误信息的长度。
应用正则表达式
最后给出一个具体的实例,介绍如何在 C
语言程序中处理正则表达式。
#include <stdio.h>
#include <sys/types.h>
#include <regex.h>
/*
取子串的函数 */
static char* substr(const char*str,
unsigned start, unsigned end)
{
unsigned n = end - start;