正規表示式實務之一 處理C語言標頭檔案

2021-04-01 04:41:46 字數 1740 閱讀 4829

本文並不對打算正規表示式的用法進行詳細解析,通過google可以找到很多相關教程,只是通過乙個例項展示正規表示式的強大功能。

案例:很多通訊系統,在長期的執行過程中,難免會遇到很多異常,為了定位錯誤原因,乙個通常的方法就是給每種錯誤或者每個出錯誤的地方分配乙個唯一的錯誤碼,然後將這個錯誤碼傳送到後台,分析者可以根據這個錯誤碼提供的附加資訊,定位異常原因,解決故障。錯誤碼和附加資訊的對應關係通常被寫入到乙個ini配置檔案中。現在我們就需要根據errorcode標頭檔案內容建立二者的對應關係。

定義錯誤巨集的標頭檔案一般是這樣的形式:

#define cmeprogramerrs_m (word)0 /***邏輯錯誤*/

#define cmeunexpstate_m  (word)(cmeprogramerrs_m + 1) /*不期望的程式狀態*/

#define cmeunexpnullpointer_m (word)(cmeprogramerrs_m + 2) /*不期望的空指標*/

#define cmeconfigerrs_m (word)500 /*配置錯誤*/

#define cmesyscapcfgerr_m (word)(cmeconfigerrs_m + 1) /*系統能力配置錯誤*/

其中錯誤的原因,直接用數字定義會根據型別分段,每段有乙個基址,具體的錯誤原因會在基址上遞增。最終生成的二者對應關係的ini配置檔案應該如下面的形式:

1=cmeunexpstate_m(不期望的程式狀態)

2=cmeunexpnullpointer_m(不期望的空指標)

501=cmesyscapcfgerr_m(系統能力配置錯誤)

最原始的方法當然是拷貝複製,從頭檔案中拷貝相關欄位到ini檔案中。當然,也可以自己編寫c語言程式,分別尋找相應的標誌字段,拆出每個字段,同時建立錯誤段基址的巨集和其數值的對應關係,然後計算每個錯誤碼,將對應關係寫道int檔案中。這樣的處理,聽起來就比較麻煩,有沒有比較好的方法?

下面利用正規表示式的功能,用perl語言完成以上功能:

#!/usr/bin/perl -w

## change errorcode macro head file to ini file

## passed filename to handle use strict;

my %base; #宣告乙個關聯陣列

#需要處理的檔案,名稱從命令列輸入獲得

my $file = shift or die "missing input file name!";

open(in, "$file") or die "opening $file: $!";

open(out, ">$file.ini") or die "opening .out: $!";

# handle content

while ()

= $2;  #將基址加入hash表

}elsif (m//s*/#define/s+(/w+)/s+/(word/)/(/s*(/w+)/s*/+/s*(/d+)/s*/)/s*///*(.*)/*///)  #對於原因格式定義

; #查詢hash表中該基址對應值

if ($basevalue ne '')

else}}

close(in);

close(out)

從上例,正規表示式的強大可見一斑。此外,在這種文字操縱的方面,也剛好是perl的用武之地。c語言雖然強大,但是在這裡確實不太方便。乙個真正pragmatic的程式設計師,不會拘泥於具體的環境和語言,而是根據具體的情況採取最恰當的工具。

正規表示式(一),處理數字與數字之間的數

1 正規表示式在處理兩個數字之間的數的時候,我們需要進行拆分,只能這樣去做。也就是把數字的最高位,開始往下數,看看這個數的範圍,以此類推,這樣說不太明白,舉個例子吧 1 222100 272099 之間的數字時,我們進行拆分。正規表示式 22210 0 9 2221 0 9 0 9 222 2 9 ...

C語言正規表示式

在很多人看來,正規表示式看上去古怪且複雜,因此往往不想去觸及或使用。如果我們拋開這種 畏難 心理,在經過循序漸進地學習之後,就會發現這些複雜的表示式其實寫起來還是相當簡單的。一旦它被你所 馴服 就可利用正規表示式把原需數小時辛苦且易錯的文字處理工作壓縮在幾分鐘 甚至幾秒鐘 內完成。正規表示式定義 正...

正規表示式學習筆記之一 簡單認識正規表示式

正規表示式是什麼東東?在編寫處理字串的程式或網頁時,經常會有查詢符合某些複雜規則的字串的需要。正規表示式就是用於描述這些規則的工具。換句話說,正規表示式就是記錄文字規則的 很可能你使用過windows dos下用於檔案查詢的萬用字元 wildcard 也就是 和?如果你想查詢某個目錄下的所有的wor...