2012-06-23 10 views
6

SQL SELECT文からフィールドリストを分割する正規表現を探しています。SQLフィールドリストを分割するPHP Regex

私はすでに、クエリの残りの部分からフィールドリストを抽出しているので、私はのように見えるかもしれ文字列が残っています

:私は論理的なアプローチは、上の文字列を分割することだと思う

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

コンマが括弧内に現れない場合は、正しい正規表現を見つけるだけです...

私が達成しようとしている最終的な結果は、どのフィールドがテーブルから直接選択されているのか、そしてSQL式から作られたフィールドを見つけることです。 WHERE句またはHAVING句。

フィールドのリストを取得したら、完璧ではありませんが、SQLの記述方法で動作する「AS」キーワードが存在するかどうかを確認できます。

(エイリアスではないかもしれない、または「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 PHPまたはPEAR’s SQL_Parserを使用できます。