使用那麼多的介面了,開始從正則開始記錄吧,還是得養成記錄的習慣,將已經寫好的**放出來,這才是你自己的,同時也是大家的。
簡要的使用流程按照如上形式即可,這裡對正規表示式做一些說明。#include
intmain()
;char data[nmatch]
[100];
memset
(data,
0x0,
sizeof
(data));
//printf("sizeof data %d\n", sizeof(data));
const
char
* pattern =
"^[^:]+: *([a-za-z]) *, *([\-]*[0-9]+) *, *speed *: *([0-9]+) *, *acc *: *([0-9]+)$"
;//const char * pattern = "^[^:]+: *([a-za-z]) *, *([\-|0-9][0-9]*) *, *speed *: *([0-9]+) *, *acc *: *([0-9]+)$";
char
* buf =
"singleaxis : x, -100 , speed: 30,acc : 30"
;regcomp
(®,pattern,cflags)
;//編譯正則模式
status =
regexec
(®,buf,nmatch,pmatch,0)
;//執行正規表示式和快取的比較
if(status == reg_nomatch)
printf
("no match\n");
elseif(
0== status)}}
}}
注意:
regexec
需要判斷結果
pmatch
陣列中存放者匹配的結果
如果需要類似python
中的group
的功能,需要在匹配表示式中加上()
regmatch_t
結構體中的rm_eo
,rm_so
分別表明了匹配的開始和結束,兩者相減 表明了匹配的長度
執行結果:
i 0 =
> len:43
match 0:singleaxis : x, -100 , speed: 30,acc : 30
i 1 =
> len:1
match 1:x
ready to copy to data[0] addr 0x7ffef92cc340
len now is 1
length:1
data[1]:x
i 2 =
> len:4
match 2:-100
ready to copy to data[1] addr 0x7ffef92cc3a4
len now is 4
length:4
data[2]:-100
i 3 =
> len:2
match 3:30
ready to copy to data[2] addr 0x7ffef92cc408
len now is 2
length:2
data[3]:30
i 4 =
> len:2
match 4:30
ready to copy to data[3] addr 0x7ffef92cc46c
len now is 2
length:2
data[4]:30
使用正規表示式
如果原來沒有使用過正規表示式,那麼可能對這個術語和概念會不太熟悉。不過,它們並不是您想象的那麼新奇。請回想一下在硬碟上是如何查詢檔案的。您肯定會使用 和 字元來幫助查詢您正尋找的檔案。字元匹配檔名中的單個字元,而 則匹配乙個或多個字元。乙個如 data?dat 的模式可以找到下述檔案 data1.d...
使用正規表示式
本文節選自 並有稍微修正。使用正規表示式 您可以使用正規表示式做很多事情。在以下的列表中,您可以找到一些最普通 最常用的正規表示式的例子。表示文字串必須在一行的開頭。所以,當查詢行的開頭只為 hosts 的行,可以使用命令 grep ls hosts 代表了一行的結尾。所以,當查詢行的結尾只為 ho...
正規表示式使用
1 靜態match方法 使用靜態match方法,可以得到源中第乙個匹配模式的連續子串。2 靜態的matches方法 這個方法的過載形式同靜態的match方法,返回乙個matchcollection,表示輸入中,匹配模式的匹配的集合。3 靜態的ismatch方法 此方法返回乙個bool,過載形式同靜態...