強大的sscanf正規表示式

2021-07-23 16:38:24 字數 925 閱讀 9002

當 sscanf 與 正規表示式 結合,我們便可以非常方便地解析字串了。

廢話不多說,直入主題。對於字串 :(注意,分隔符是 '\t' 不是空格 ! )

line ="2016-10-13    北京市海淀區    monday    張三    學習",  從中解析出

date, place , time , person , action。

思路:其實 sscanf 並不神奇,正規表示式 也不神奇,都是一步一步按照規則執行的。我們可以想象,有乙個字元指標 p 指向 line 的第乙個字元 '2' ,那麼如何讓 '2' , '0' , '1' , '6' , '-' , '1' , '0' , '-' , '1' , '3' 依次通過篩選,在分隔符 '\t' 處停止 ? 於是我們回憶正規表示式的寫法,應該是 %[^\t] ,其中[^\t]表示所有非'\t' 字元的字元集合, %表示通過篩選,這個地方是關鍵,要注意理解。

接下來,我們可以想象,字元指標 p 指向了 '3' 和 '北' 之間的分隔符 '\t' ,很顯然嘛,我們要過濾掉這個分隔符,於是我們這麼寫 %*[\t] ,%*的意思就是「過濾掉,丟棄」,[\t] 好理解,就是指的分隔符 '\t' ,這樣的話,分隔符就被我們無情地丟棄掉了~

接下來,字元指標 p 指向了 '北' 這個字元,這是我們所需要的,於是同理,還是%[^\t] ,同理,還是丟棄分隔符。。。

所以最終我們這麼寫:

sscanf ( line, "%[^\t]%*[\t]%[^\t]%*[\t]%[^\t]%*[\t]%[^\t]%*[\t]%[^\r\n]", date, place, time, person, action );
檢視執行結果:

sscanf正規表示式

c語言 sscanf正規表示式 2011 01 07 00 18 表頭檔案 include stdio.h 定義函式 int sscanf const char str,const char format,函式說明 sscanf 會將引數str的字串根據引數format字串來轉換並格式化資料。格式轉...

sscanf與正規表示式

from 今天翻google reader的時候看到這樣一篇文章,介紹的是sscanf的高階用法。直到今天我才知道sscanf是可以直接用正規表示式的,慚愧。在msdn中sscanf的宣告如下 int sscanf const char buffer const char format argume...

sscanf正規表示式 二

表頭檔案 include stdio.h 定義函式 int sscanf const char str,const char format,函式說明 sscanf 會將引數str的字串根據引數format字串來轉換並格式化資料。格式轉換形式請參考scanf 轉換後的結果存於對應的引數內。返回值 成功...