2009-02-25 32 views
1

我想寫一個RegEx從變量聲明語句中提取所有變量值及其名稱。說我有用於c中變量聲明和初始化的正則表達式#

INT I,K = 10,L = 0

我想寫一個正則表達式的東西如int \ S ^,?|(^ ,?)* 但是這也將接受 ķ = 10,即(不INT在它之前) 基本思路是 如果字符串以整數,那麼 獲得通過分隔的變量列表,

我知道提取CSV值,但在這裏我的字符串具有一定的初值爲好。我該如何解決它?

回答

3

開始思考一個定義,說的結構,

(a line can start with some spaces) followed by, 

(Type) followed by 

(at least one space) 
(variable_1) 
(optionally 
    (comma // next var 
    | 
    '='number // initialization 
    ) ...` 

然後嘗試給每個組轉換:

^  \s* \w+   \s+  \w+   ?   (',' | '=' \d+ ) ... 
line some type   at least var   optionally more or init some 
start spaces (some chars) one space (some chars)    vars  val digits 

左功課,除去空間和修復了最後的正則表達式

0

一些有用的信息,試試這個:

^(int|[sS]tring)\s+\w+\s*(=\s*[^,]+)?(,\s*\w+\s*(=\s*[^,]+)?)*$ 

它會按您的示例代碼

int i,k = 10,l=0 

並作出一些假設關於您可能使用或可能不使用的語言,它也會匹配:

int i, j, k=10, l=0 
string i=23, j, k=10, l=0