2012-06-23 33 views
6

我正在寻找一个正则表达式来从SQL SELECT语句拆分字段列表。PHP正则表达式来拆分SQL字段列表

我已经提取从查询的其他字段列表,所以我留下了一个字符串,它可能看起来像:

field1,field2,field3,CONCAT(field1,field2) AS concatted,IF(field1 = field2,field3,field4) AS logic 

我觉得逻辑的做法是各执一个字符串逗号,只要逗号不出现在禁忌之中,所以我只需要找到正确的正则表达式来做到这一点...?

我想要实现的最终结果是找出哪些字段看起来是从表中直接选择的,哪些是从SQL表达式创建的,以便稍后可以决定是否使用WHERE或HAVING子句。

一旦我有了字段列表,我可以检查“AS”关键字的存在,尽管这不是完美的,但应该用我编写SQL的方式工作。

为表明不属于表达式,但是别名字段,和表达式可以不是锯齿,或可以是但不使用“AS”之间differenciates另一种方式的奖励积分

回答

4

此正则表达式应该工作:在PHP

/,(?![^()]*+\\))/ 

示例实现,在这里:

$vv = 'field1,field2,field3,CONCAT(field1,field2) AS concatted,IF(field1 = field2,field3,field4) AS logic'; 

$arr = preg_split ("/,(?![^()]*+\\))/", $vv); 
foreach ($arr as &$value) { 
    print($value); 
} 
+0

似乎完美地完成这项工作,谢谢! – Codecraft

0

当谈到ŧ o解析像SQL这样的不规则语言,你应该总是使用正确的解析器而不是一些正则表达式。

在你的情况你可以使用这个SQL parser in PHPPEAR’s SQL_Parser