2009-02-25 35 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