基本问题,对于regcomp人来说我不清楚。
如果我有regex_t的静态实例,是否可以将其重用于几次编译而不必每次都释放它,例如:
int match(char* pattern, char* name) {
static regex_t re;
regcomp(&re,pattern,REG_EXTENDED|REG_NOSUB);
...
}
代码本身稍微复杂一点,如果没有在两次调用之间更改模式,则想法是使用静态变量来保存编译。问题是我是否需要在每个新的regcomp之前调用regfree。
谢谢。
最佳答案
如果要使用以前编译成regcomp()
的re
的结果,那就很好了-只要您同时不调用regfree()
即可。
但是,如果您想通过再次调用regcomp()
来编译新的正则表达式,则需要调用regfree()
来正确释放上一个regcomp()
调用所使用的资源。因此,您可能需要一些其他静态变量来跟踪re
变量是否已被调用regcomp()
所使用,并且在重新使用之前需要进行regfree()
-ed处理。
类似于以下内容:
int match(char* pattern, char* name) {
static regex_t re;
static int re_in_use = 0;
if (isNewRegex( pattern)) { // however you want to determine this...
if (re_in_use) {
regfree( &re);
re_in_use = 0;
}
}
re_in_use = regcomp(&re,pattern,REG_EXTENDED|REG_NOSUB);
...
}