2012-06-23 31 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