C語言中使用正規表示式

2021-09-17 02:02:33 字數 2372 閱讀 6540

有四個函式:

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 ...