2013-09-16 120 views
1

我正在學習Tcl和正則表達式的過程。我有一個任務,我需要一個正則表達式和Tcl

Tcl腳本預成型並需要一些幫助。

我有一個C++頭文件,我想解析成一個表。這是一個定義常量的文件。

有2種形式,我需要解析:

const int a = 0x00000001; //Comment for this variable 
const int b = 0x00000003; //Comment for this variable 

和定義在一個枚舉像:

CONSTNAMEA = MACROA | MACROB | 0x000A, //Comment for this variable 
CONSTNAMEB = MACROA | MACROB | 0x00C1, //Comment for this variable 

在第一組中,我需要更換 '=' 和' ;」與'|'。這很容易用regsub完成。但是,第二組更復雜一點,我似乎無法正確理解。

我想要做的就是將'CONSTNAMEA','0x000A'和註釋拉出到單獨的變量中。

我的想法是,我需要三個正則表達式。一個解析出名字,另一個解析數字,第三個解釋評論。

The name regex would be "Start at beginning of string and stop at '='" 
The number would be '|' {anything} ',' 
And the comment would be "//" {anything} '\n' 

對不起?我將不勝感激任何幫助構建這些正則表達式!

+0

爲什麼不爲Tcl添加標籤? – crashmstr

+0

我覺得這更像是一個正則表達式問題,但是很好。我會添加它。 – radensb

回答

1

一個正則表達式應該足以捕獲從線的所有三個子:

^\s*([a-zA-Z_]+)\s*=(?:\s*[a-zA-Z_]+\s*\|)*\s*([0-9a-fA-Fx]+),\s*\/\/(.*)$ 

的名稱將是可作爲第一組,作爲第二個中的數,和作爲第三一個註釋。

要調試像這樣的表達式,我推薦一個工具,如regexper,它可以將上面的正則表達式轉換爲易於遵循的鐵路圖。