我正在调查这些,看看我是否可以使用它们。我正在读:
如果有人能帮助我理解,那就太棒了:
regcomp()函数应编译pattern参数指向的字符串中包含的正则表达式,并将结果放在preg指向的结构中。
这是否意味着我无法使用运行时令牌进行搜索?如果我要求用户(在运行时)向我提供他想要搜索的内容,我不能这样做吗?
答案 0 :(得分:3)
是的,您可以在运行时处理正则表达式。 POSIX正则表达式由两个主要函数regcomp()
和regexec()
(加regfree()
和regerror()
)处理。在下面的示例中,regex_string
类似于“temp。*”,string_to_match
是“temp匹配”
regex_t reg;
if(regcomp(®, regex_string, REG_EXTENDED | REG_ICASE) != 0) {
fprintf(stderr, "Failed to create regex\n");
exit(1);
}
if(regexec(®, string_to_match, 0, NULL, 0) == 0) {
fprintf(stderr, "Regex matched!\n");
} else {
fprintf(stderr, "Regex failed to match!\n");
}
regfree(®);
我想添加,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;
}