有四個函式:
int regcomp (regex_t *compiled, const char *pattern, int cflags)
引數1: 結構體 --- 編譯(字串---結構體)儲存正規表示式
引數2: 正規表示式串。
引數3: 標誌位:
1. 擴充套件正則:reg_extended
2. 忽略大小寫:reg_icase
3. 識別換行符:reg_newline ---> ^ $
4. 指定是否儲存匹配結果:reg_nosub ---> regexec函式參3取0值,並且參4取null
返回值:成功0;失敗錯誤號
int regexec (regex_t *compiled, char *string, size_t nmatch, regmatch_t matchptr, int eflags)
引數1: regcomp編譯後傳出的 結構體
引數2: 待用正規表示式 進行匹配的字串
引數3: 陣列大小
引數4: 用來儲存返回結果的陣列
引數5: 標誌位:
1. reg_notbol 使^無效
2. reg_noteol 使$無效
返回值:成功0;失敗錯誤號
regmatch_t 是乙個結構體資料型別,在regex.h中定義:
typedef struct regmatch_t;
成員rm_so 存放匹配文字串在目標串中的開始位置,rm_eo 存放結束位置。通常我們以陣列的形式定義一組這樣的結構。因為往往我們的正規表示式中還包含子正規表示式。陣列0單元存放主正規表示式位置,後邊的單元依次存放子正規表示式位置。
在regexec 中第三個引數是這個結構體的陣列,裡面有兩個成員,乙個是字串開始,乙個是結束
當我們使用完編譯好的正規表示式後,或者要重新編譯其他正規表示式的時候,我們可以用這個函式清空compiled指向的regex_t結構體的內容,請記住,如果是重新編譯的話,一定要先清空regex_t結構體。
void regfree (regex_t *compiled) ---> 釋放結構體。
size_t regerror (int errcode, regex_t *compiled, char *buffer, size_t length)
errcode 是由regcomp 和 regexec 函式返回的錯誤代號。
compiled 是已經用regcomp函式編譯好的正規表示式,這個值可以為null。
buffer 指向用來存放錯誤資訊的字串的記憶體空間。
length 指明buffer的長度,如果這個錯誤資訊的長度大於這個值,則regerror 函式會自動截斷超出的字串,但他仍然會返回完整的字串的長度。所以我們可以用如下的方法先得到錯誤字串的長度。
例如: size_t length = regerror (errcode, compiled, null, 0);
#include #include #include int main(int argc, char ** ar**)
const char * pregexstr = ar**[1];
const char * ptext = ar**[2];
regex_t oregex;
int nerrcode = 0;
char szerrmsg[1024] = ;
size_t unerrmsglen = 0;
if ((nerrcode = regcomp(&oregex, pregexstr, reg_extended|reg_nosub)) == 0)
} unerrmsglen = regerror(nerrcode, &oregex, szerrmsg, sizeof(szerrmsg));
unerrmsglen = unerrmsglen < sizeof(szerrmsg) ? unerrmsglen : sizeof(szerrmsg) - 1;
szerrmsg[unerrmsglen] = '\0';
printf("errmsg: %s\n", szerrmsg);
regfree(&oregex);
return 1;
} 匹配**:
注:\w匹配乙個字元,包含下劃線
如何在C語言中使用正規表示式
如果使用者熟悉linux下的sed awk grep或vi,那麼對正規表示式這一概念肯定不會陌生。由於它可以極大地簡化處理字串時的複雜度,因此現在已經在許多linux實用工具中得到了應用。千萬不要以為正規表示式只是perl python bash等指令碼語言的專利,作為c語言程式設計師,使用者同樣可...
linux c 語言中使用正規表示式pcre
說起正規表示式 regular expression 也許有的朋友天天都在使用,比如grep vim sed awk,只是可能對這個名詞不大熟悉。正規表示式一般簡寫為regex或者regexp,甚至是re。關於正規表示式的介紹,有很多的文章,用搜尋引擎查詢就可以找到很不錯的使用說明。但是在c c 語...
在C C 語言中使用正規表示式
說起正規表示式 regular expression 也許有的朋友天天都在使用,比如grep vim sed awk,只是可能對這個名詞不大熟悉。正規表示式一般簡寫為regex或者regexp,甚至是re。關於 正規表示式的介紹,有很多的文章,用搜尋引擎查詢就可以找到很不錯的使用說明。但是在c c ...