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)
こんな感じの結果を出力したいです。
正規表現に詳しい方、どうか、ご教授おねがいします

回答の条件
  • 1人2回まで
  • 登録:2009/08/21 16:47:52
  • 終了:2009/08/28 16:50:02

回答(1件)

id:y-kawaz No.1

y-kawaz回答回数1420ベストアンサー獲得回数2252009/08/21 19:26:32

ポイント60pt

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

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

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

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

id:kimu_507

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

2009/08/23 00:38:05

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません