人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

JAVAで正規表現を使ってSQL文中の SELECT、FROM、WHERE句の中身をそれぞれ検出したいですか、
教えてください
例:

SELECT
(SELECT COUNT(*) FROM Temp WHERE Temp.ID = 1),
(SELECT COUNT(*) FROM Temp WHERE Temp.ID = 2),
(SELECT COUNT(*) FROM Temp WHERE Temp.ID = 3)
FROM
(SELECT ID FROM A, B ,C WHERE 結合条件) Temp
WHERE
TempId=(SELECT COUNT(*) FROM Temp WHERE Temp.ID = 1)

こんなsql文があるとして正規表現を使ってselect句中身とFROM句の中身とWHERE句の中身をそれぞれ検出したいです。
*(sql文は適当なものなので中身の意味は気にしないでください)
見やすくする為今sql文が改行になっていますが正規表現を書くときは改行なして一行になっていると思ってください。
検出したいものは:
SELECT=> (SELECT COUNT(*) FROM Temp WHERE Temp.ID = 1),
(SELECT COUNT(*) FROM Temp WHERE Temp.ID = 2),
(SELECT COUNT(*) FROM Temp WHERE Temp.ID = 3)

FROM => (SELECT ID FROM A, B ,C WHERE 結合条件) Temp

WHERE => TempId=(SELECT COUNT(*) FROM Temp WHERE Temp.ID = 1)
こんな感じの結果を出力したいです。
正規表現に詳しい方、どうか、ご教授おねがいします

●質問者: kimu_507
●カテゴリ:コンピュータ
✍キーワード:Java SELECT いもの 教授 正規表現
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● y-kawaz
●60ポイント

バランスした括弧やシングルクオート等のマッチは、一般的な正規表現では扱うことが出来ません。

PerlやPythonなどでは再帰的な正規表現が使えるので実現可能ですが、Javaでは再帰的な正規表現をサポートしていません。

結論として、Javaの正規表現では質問の内容は実現不可能です、が答えです。

必要ならば自分でパーサを作るしかないでしょう。JDBCドライバのソースとかを漁れば使えるパーサが見つかる気もします。

◎質問者からの返答

そうなんですが。。有難うございます。 参考になりました。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ