Linux API使用 正規表示式regex

2021-09-29 01:43:30 字數 1941 閱讀 3804

使用那麼多的介面了,開始從正則開始記錄吧,還是得養成記錄的習慣,將已經寫好的**放出來,這才是你自己的,同時也是大家的。

#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,過載形式同靜態...