如果問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 的下載地址:請點這裡