1. 程式人生 > >C++正則表示式匹配工具

C++正則表示式匹配工具

因為要區分電話號碼郵件等各種聯絡方式,所以想用正則表示式來匹配,但是又要做到windows和Linux相容,所以查了一下,有RE2,glibc regex和C++ regex. C++ regex 包含在標頭檔案<regex>中,大致的介面有:
basic_regex 正則表示式物件,是一個通用的模板,有typedef basic_regex<char> regex 和 typedef basic_regex<char_t>wregex;
regex_match 將一個字元序列和正則表示式匹配
regex_search 尋找字元序列中的子串中與正則表示式匹配的結果,在找到第一個匹配的結果後就會停止查詢
regex_replace 使用格式化的替換文字,替換正則表示式匹配到字元序列的地方
regex_iterator 迭代器,用來匹配所有 的子串 
match_results 容器類,儲存正則表示式匹配的結果。
sub_match 容器類,儲存子正則表示式匹配的字元序列.
參考官方文件:http://www.cplusplus.com/reference/regex/ 使用起來還比較簡單,但是由於我的Linux環境的gcc還是4.1.2,太老了,又沒有許可權升級,所以Linux版本只能使用glibc regex。如果想要linux支援的話,gcc 版本至少需要4.9.0。 glibc regex

標頭檔案是<regex.h>,主要的介面如下: // 將正則式編譯成 regexec 使用的形式,preg 儲存 regex 編譯後的結果 int regcomp(regex_t *preg, constchar *regex, int cflags);  // 匹配非空字串和預編譯好的正則式 int regexec(const regex_t *preg, constchar *string, size_t nmatch, regmatch_t pmatch[], int eflags);  // 如果有錯誤發生,根據 errcode 得到相應的錯誤描述 size_t regerror(
int errcode, const regex_t *preg, char *errbuf, size_t errbuf_size);  // 釋放預編譯正則式的 buffer void regfree(regex_t *preg); RE2 另外一個強大的正則表示式庫就是RE2,它快速、安全,執行緒友好,是PCREPERLpython等回溯正則表示式引擎(backtracking regular expression engine)的一個替代品。RE2 支援 linux 和絕大多數的 Unix 平臺。 使用起來也很簡單,githubhttps://github.com/google/re2
RE2 re("(\\w+):(\\d+)");
assert(re.ok());  // compiled; if not, see re.error();

assert(RE2::FullMatch("ruby:1234", re, &s, &i));
assert(RE2::FullMatch("ruby:1234", re, &s));
assert(RE2::FullMatch("ruby:1234", re, (void*)NULL, &i));
assert(!RE2::FullMatch("ruby:123456789123", re, &s, &i));
使用方式也是簡單明瞭啊。