繁体   English   中英

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

[英]regular expression matching functions of standard C library

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

如果有人可以帮助我理解,那就太好了:

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

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

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

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()

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

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

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

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

我想我在 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;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM