如果問c++的標准庫裡最缺乏的功能,正則表達式估計能排進前3,尤其在web開發領域,沒有正則表達式實在令人太難受了,ruby,php人家都自帶啊。成熟的c/c++正則庫不多,首選應該是boost中的正則庫,但也意味著你要引入boost這個龐然大物,對於追求微內核的程序而言,有點過重,甚至很多C++開發人員也比較抵觸:)
在boost之外,比較有名的就是PCRE了,pcre是c實現的,可以在這裡下載。
網上有段示例代碼,如下:
#include <pcre.h> #include <stdio.h> #include <string.h> int main(int argc, char ** argv) { if (argc != 3) { printf("Usage: %s pattern text\n", argv[0]); return 1; } const char * pPattern = argv[1]; const char * pText = argv[2]; const char * pErrMsg = NULL; pcre * pPcre = NULL; int nOffset = -1; if (NULL == (pPcre = pcre_compile(pPattern, 0, &pErrMsg, &nOffset, NULL))) { printf("ErrMsg=%s, Offset=%d\n", pErrMsg, nOffset); return 1; } else { if (pcre_exec(pPcre, NULL, pText, strlen(pText), 0, 0, NULL, 0) < 0) { printf("%s doesn't match %s\n", pText, pPattern); } else { printf("%s matches %s\n", pText, pPattern); } } }
大致流程是先pcre_compile正則文本,再傳入需要匹配的內容,更多API請見這裡。
如果覺得c api 用起來不太方便,之前有個流傳比較廣的c++版本,對pcre進行了對象封裝,但是從這個網站來看,貌似好幾年沒更新了,實際上,pcre 本身就有提供c++ api,還是google提供的,直接 include pcrecpp.h 即可,相關文檔可以在這裡看。
PCRE 的詳細介紹:請點這裡
PCRE 的下載地址:請點這裡