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