background image

 

释放正则表达式

无论什么时候,当不再需要已经编译过的正则表达式时,都应该调用函数 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;