簡體   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