基本问题,对于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);

  ...
}

10-04 21:55