标准C库的正则表达式匹配函数

时间:2011-07-23 00:18:11

标签: c regex

我正在调查这些,看看我是否可以使用它们。我正在读:

如果有人能帮助我理解,那就太棒了:

  

regcomp()函数应编译pattern参数指向的字符串中包含的正则表达式,并将结果放在preg指向的结构中。

这是否意味着我无法使用运行时令牌进行搜索?如果我要求用户(在运行时)向我提供他想要搜索的内容,我不能这样做吗?

3 个答案:

答案 0 :(得分:3)

是的,您可以在运行时处理正则表达式。 POSIX正则表达式由两个主要函数regcomp()regexec()(加regfree()regerror())处理。在下面的示例中,regex_string类似于“temp。*”,string_to_match是“temp匹配”

regex_t reg;
if(regcomp(&reg, regex_string, REG_EXTENDED | REG_ICASE) != 0) {
  fprintf(stderr, "Failed to create regex\n");
  exit(1);
}

if(regexec(&reg, string_to_match, 0, NULL, 0) == 0) {
  fprintf(stderr, "Regex matched!\n");
} else {
  fprintf(stderr, "Regex failed to match!\n");
}

regfree(&reg);

我想添加,regex_string只是一个char *,它可以是任何以NULL结尾的字符串。 string_to_match也可以是任何以NULL结尾的字符串。重要的是要区分在regcomp()'之后更改regex_string并不会更改实际与regexec()匹配的正则表达式。为此,您需要regfree()然后重新regcomp()

答案 1 :(得分:1)

  

“regcomp()函数应编译包含的正则表达式   在字符串中......“

     

问:这是否意味着我无法使用运行时令牌   搜索字符串?

不,这只意味着,一旦你得到了字符串,regcomp()将编译正则表达式,以便它可以与一个或多个输入字符串一起使用。

您可以在编译时或运行时创建正则表达式和/或任何目标字符串。

答案 2 :(得分:0)

我想我在mij.oltrelinux.com/devel/unixprg /

找到了一个很好的例子
 /* compiles the RE. If this step fails, reveals what's wrong with the RE */
if ( (err = regcomp(&myre, argv[1], REG_EXTENDED)) != 0 ) {
    regerror(err, &myre, err_msg, MAX_ERR_LENGTH);
    printf("Error analyzing regular expression '%s': %s.\n", argv[1], err_msg);
    return 1;
}