2

次のクエリを検討してください。

select
    foo,
    bar,
    yourmom
from
    theTable

select top 10 *
from
    theTable

select distinct foo, bar + 1, yourmom from theTable

抽出する正規表現クエリが必要です:

foo,
bar,
yourmom

*

foo, bar + 1, yourmom

それぞれ。

試し^\sselect\s(distinct\s)?(top\s\d*)?(?'columns'.*\s)from[\s.]*$てみましたが、うまくいくと思いましたが、うまくいきません。私はしばらくそれをいじっていますが、まだ 3 つのテスト ケースすべてで動作させることができません。誰かが正規表現で私を助けることができますか?

4

2 に答える 2

3

編集: まず、改行を含むすべての文字に .-match を付ける必要があります。Java では DOTALL フラグを設定できますが、C# ではRegexOptions.SingleLineオプションを使用する必要があると思います。

次に、この式が機能するはずです。

^\s*select\s+(?:distinct\s+)?(?:top\s+\d*\s+)?(?'columns'.*?)from.*$
于 2012-04-18T15:48:20.733 に答える
1

正規表現を使用するよりも、 SQLクエリ用の「適切な」パーサーを作成する方が実際には簡単だと思います(Ironyを確認してください。これは素晴らしいもので、SQLの例が付属しています)。

于 2012-04-18T15:53:56.780 に答える