C語言使用正則,grep,find

2021-10-03 08:13:18 字數 2940 閱讀 8102

1,regcomp函式:

函式原型

int regcomp (regex_t*compiled/*out*/

,const

char

* pattern /*in*/

,int cflags);

include

value 成功 0, 失敗 錯誤號

compiled 是乙個結構體資料型別,用來存放編譯後的正規表示式

pattern 是指向我們寫好的正規表示式的指標

cflags 如下4個值, 它們是點陣圖,使用 「 | 」可以傳入多個巨集

reg_extended   		//以extended規範 匹配, 傳0 或null 使用 basic 規範 匹配

reg_icase //匹配字母時忽略大小寫

reg_nosub //不用儲存匹配後的結果,只返回是否成功匹配

reg_newline //識別換行符,這樣'$'就可以從行尾開始匹配,'^'就可以從行的開頭開始匹配

regexec函式

int regexec (regex_t *compiled/*in*/

,char

*string/*in*/

, size_t nmatch, regmatch_t matchptr[

]/*out*/

,int eflags);

include

value 成功 0 , 失敗 設定巨集reg_nomatch

compiled 是已經用regcomp函式初始化好的正規表示式。

string 是目標文字串

nmatch 是regmatch_t結構體陣列的長度

matchptr regmatch_t型別的結構體陣列,存放匹配文字串的位置資訊

eflags 有兩個值: reg_notbol 讓特殊字元^無作用, reg_noteol 讓特殊字元$無作用。

regfree函式

void regfree (regex_t *compiled);	//清空 regex_t 這個結構體, 該結構體成員有malloc的記憶體
regerror函式

size_t regerror (

int errcode, regex_t *compiled/*in*/

,char

*buffer/*out*/

, size_t length);

include

value 錯誤字串的長度

errcode 是由regcomp 和 regexec 函式返回的錯誤代號

compiled 是已經用regcomp函式編譯好的正規表示式,這個值可以為null

buffer 和 length 指向用來存放錯誤資訊的字串的記憶體空間和指明buffer的長度

#include

#include

#include

intmain

(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));

if(unerrmsglen >

sizeof

(szerrmsg)

)printf

("errmsg: %s\n"

, szerrmsg)

;regfree

(&oregex)

;return1;

}

grep

grep命令是一種強大的文字搜尋工具,它能使用正規表示式搜尋文字,並把匹配的行列印出來。

grep [options]

主要引數: grep --help可檢視

-c:只輸出匹配行的計數。

-i:不區分大小寫。

-h:查詢多檔案時不顯示檔名。

-l:查詢多檔案時只輸出包含匹配字元的檔名。

-n:顯示匹配行及 行號。

-s:不顯示不存在或無匹配文字的錯誤資訊。

-v:顯示不包含匹配文字的所有行。

itcast$ grep 『test』 d*			#顯示所有以d開頭的檔案中包含 test的行

itcast $ grep 『test』 aa bb cc #顯示在aa,bb,cc檔案中匹配test的行。

itcast $ grep -e 『[a-z]

』 aa #顯示所有包含每個字串至少有5個連續小寫字元的字串的行。

itcast $ grep -e 『w(es)t.*\1′ aa #如果west被匹配,則es就被儲存到記憶體中,並標記為1,

#然後搜尋任意個字元(.*),這些字元後面緊跟著 另外乙個es(\1),找到就顯示該行

留行待更新

留行待更新

grep find 命令組合使用

b find grep 組合的乙個例子 b 用來查詢所有 h 檔案中的含有 helloworld 字串的檔案.find name h exec grep helloworld b 使用exec或ok來執行shell命令 b 使用find時,只要把想要的操作寫在乙個檔案裡,就可以用exec來配合fin...

C語言 正則初步

include include include int check const char buf regcomp pattern1,cflags status regexec buf,nmatch,pmatch,0 if status reg nomatch regcomp pattern2,cfl...

C語言使用正規表示式

一 簡介 乙個好的程式設計師是會使用db和regular expression的程式設計師,可見兩者是多麼重要。正規表示式是能極大地提高工作效率的工具,使用過linux下各種具備re特性的工具的人一定對此深有感觸。很多語言都支援re,用的最多的當然是指令碼,其中以perl最盛。不過,用c語言來用re...