[英]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(®, 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()
。
“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.