問題の解決策を 1 日中検索して見つけましたが、問題の解決策が見つかりませんでした。正規表現を使用して「展開」する必要があるクエリがあります。選択したフィールド、テーブル、および where 条件の後のフィールドを (チェック自体なしで) 取得したい。
SELECT `a`, `b`, `c` FROM `d` WHERE `e` > 1 OR `d` > 1
私の試みは次のようになります。
/SELECT (?<selectedFields>(,*?)\`(.*?)\`) FROM (?<tableName>\`(.*?)\`) WHERE (?<checkFields>\`(.*?)\`)/
私が抱えている問題は、where 条件の最初のフィールドの後に正規表現が停止することです。私が得た出力は次のようになります。
Array
(
[0] => Array
(
[0] => SELECT `a`, `b`, `c` FROM `d` WHERE `e`
)
[selectedFields] => Array
(
[0] => `a`, `b`, `c`
)
[1] => Array
(
[0] => `a`, `b`, `c`
)
[2] => Array
(
[0] =>
)
[3] => Array
(
[0] => a`, `b`, `c
)
[tableName] => Array
(
[0] => `d`
)
[4] => Array
(
[0] => `d`
)
[5] => Array
(
[0] => d
)
[checkFields] => Array
(
[0] => `e`
)
[6] => Array
(
[0] => `e`
)
[7] => Array
(
[0] => e
)
)
選択したフィールドを取得したのと同じ種類の配列に「checkFields」が必要です。私は何を間違っていますか?2 つ目は、正規表現の selectFields が期待どおりに各フィールド名の配列ではなく、',' で区切られていることです...