程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C語言中的正則表達式

C語言中的正則表達式

編輯:關於C語言

正則表達式(Regular Expressions),又被稱為regex或regexp,是一種十分簡便、靈活的文本處理工具。它可以用來精確地找出某文本中匹配某種指定規則的內容。          關於正則表達式的教程,可以參考這裡。           在C/C++中常用的正則表達式庫有GNU Regex Library, Boost.Regex, PCRE, PCRE++。這四個庫中,後面兩個是有關系,其它都是各自己獨立的,是不同的實現。今天主要用GNU Regex Library。            幾個主要函數   (1)regcomp:     [cpp]  int regcomp(regex_t *preg, const char *pattern, int cflags)   功能:將要進行匹配的正則表達式pattern進行編譯,做匹配前的准備工作   參數: preg, 輸出參數,用來保存編譯後的正則表達式結果   pattern, 輸入參數,傳入要進行編譯的正則表達式的字符串   cflags, 輸入參數,用來指定正則表達式匹配過程中的一些選項   返回值:編譯成功返回0,失敗返回非0的錯誤碼     int regcomp(regex_t *preg, const char *pattern, int cflags) 功能:將要進行匹配的正則表達式pattern進行編譯,做匹配前的准備工作 參數: preg, 輸出參數,用來保存編譯後的正則表達式結果 pattern, 輸入參數,傳入要進行編譯的正則表達式的字符串 cflags, 輸入參數,用來指定正則表達式匹配過程中的一些選項 返回值:編譯成功返回0,失敗返回非0的錯誤碼 (2)regexec:       [cpp]  int regexec(const regex_t *preg, const char *string, size_t nmatch, regmatch_t pmatch[],                int eflags)   功能:用來檢測字符串string是否匹配正則表達式preg   參數: preg, 輸入參數,在(1)regcomp中編譯好的正則表達式規則         string, 輸入參數,用來被匹配的字符串         nmatch, 輸入參數,用來指定pmatch參數所對應的數組的長度         pmatch, 輸出參數,用來輸出在string中匹配preg的具體位置         eflag, 輸入參數,用來指定正則表達式匹配過程中的一些選項   返回值: 如果string匹配preg所指定的規則,則返回0, 否則返回非0     int regexec(const regex_t *preg, const char *string, size_t nmatch, regmatch_t pmatch[],              int eflags) 功能:用來檢測字符串string是否匹配正則表達式preg 參數: preg, 輸入參數,在(1)regcomp中編譯好的正則表達式規則       string, 輸入參數,用來被匹配的字符串       nmatch, 輸入參數,用來指定pmatch參數所對應的數組的長度       pmatch, 輸出參數,用來輸出在string中匹配preg的具體位置       eflag, 輸入參數,用來指定正則表達式匹配過程中的一些選項 返回值: 如果string匹配preg所指定的規則,則返回0, 否則返回非0 (3)regerror:       [plain] view plaincopyprint?size_t regerror(int errcode, const regex_t *preg, char *errbuf, size_t errbuf_size)   功能:用來把在regcompt和regexec中產生的錯誤碼轉化成字符串形式的錯誤信息   參數: errcode, 輸入參數,在regcomp或regexec調用中返回的錯誤碼   preg, 輸入參數,與錯誤碼所對應的編譯過的正則表達式結構   errbuf, 輸出參數,用來返回錯誤信息的buffer,如果buffer不夠所需大小,錯誤信息將被截斷   errbuf_size, 輸入參數,返回錯誤信息的buffer的大小    返回值: 如果errbuf_size為0,那麼regerror返回錯誤信息所需要的buffer的大小     size_t regerror(int errcode, const regex_t *preg, char *errbuf, size_t errbuf_size) 功能:用來把在regcompt和regexec中產生的錯誤碼轉化成字符串形式的錯誤信息 參數: errcode, 輸入參數,在regcomp或regexec調用中返回的錯誤碼 preg, 輸入參數,與錯誤碼所對應的編譯過的正則表達式結構 errbuf, 輸出參數,用來返回錯誤信息的buffer,如果buffer不夠所需大小,錯誤信息將被截斷 errbuf_size, 輸入參數,返回錯誤信息的buffer的大小  返回值: 如果errbuf_size為0,那麼regerror返回錯誤信息所需要的buffer的大小 (4)regfree:       [plain] view plaincopyprint?void regfree (regex_t *preg)   功能: 用來釋放由regcomp編譯時生成的preg結構所占用的內存   參數: preg, 輸入參數,由regcomp編譯時生成的正則表達的結構指針   返回值: 無     void regfree (regex_t *preg) 功能: 用來釋放由regcomp編譯時生成的preg結構所占用的內存 參數: preg, 輸入參數,由regcomp編譯時生成的正則表達的結構指針 返回值: 無     實例-郵箱匹配     [plain]  #include <stdio.h>   #include <sys/types.h>   #include <regex.h>   int main(int argc,char** argv)   {       int status,i;       int cflags=REG_EXTENDED;       regmatch_t pmatch[1];       const size_t nmatch=1;       regex_t reg;       const char *pattern ="^\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*.\\w+([-.]\\w+)*";       char buf[256];              regcomp(®,pattern,cflags);       while(true)       {           printf("input your email address:\n");           gets(buf);           if((status=regexec(®,buf,nmatch,pmatch,0))==0)           {               printf("Correct\n");               //print match part               for(i=pmatch[0].rm_so;i<pmatch[0].rm_eo;++i)               putchar(buf[i]);               printf("\n");               regfree(®);               break;           }           else           {               printf("Error address,input again:\n");           }       }       return 0;          }     #include <stdio.h> #include <sys/types.h> #include <regex.h> int main(int argc,char** argv) { int status,i; int cflags=REG_EXTENDED; regmatch_t pmatch[1]; const size_t nmatch=1; regex_t reg; const char *pattern ="^\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*.\\w+([-.]\\w+)*"; char buf[256];   regcomp(®,pattern,cflags); while(true) { printf("input your email address:\n"); gets(buf); if((status=regexec(®,buf,nmatch,pmatch,0))==0) { printf("Correct\n"); //print match part for(i=pmatch[0].rm_so;i<pmatch[0].rm_eo;++i) putchar(buf[i]); printf("\n"); regfree(®); break; } else { printf("Error address,input again:\n"); } } return 0;   }     \      

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved