標準 C/C++ 不支持正則表達式,但可借助第三方庫,最著名為 Philip Hazel 的 PCRE(Perl-Compatible Regular Expressions),多數 Linux 發行版預裝。
regcomp() 將字符串正則編譯為 regex_t 結構。int regcomp(regex_t *preg, const char *regex, int cflags);preg 填充編譯結果,cflags 控制處理細節。regexec() 執行模式匹配。int regexec(const regex_t *preg, const char *string, size_t nmatch, regmatch_t pmatch[], int eflags);regmatch_t 包含 rm_so(起始偏移)和 rm_eo(結束偏移),用於返回匹配位置。nmatch 和 pmatch 配合返回子表達式匹配結果。regex_t re;
regcomp(&re, "^[a-z]+@[a-z]+\\.[a-z]+$", REG_EXTENDED); // 編譯郵箱正則
regmatch_t matches[1];
if (regexec(&re, "test@example.com", 1, matches, 0) == 0) {
// 匹配成功,matches[0] 含整體匹配區間
}
regfree(&re); // 釋放編譯後的 regex_t
regcomp 返回值。cflags 常用 REG_EXTENDED(擴展正則)、REG_ICASE(忽略大小寫)、REG_NEWLINE(換行敏感)。regfree 釋放資源。掌握 PCRE API,讓 C 語言也能輕鬆處理複雜文本解析任務。