APIからいくつかのログサービスがあり、クエリがアクセスしているデータベースを捕らえるのに問題があります。文字列から単語を抽出する方法
言って、クエリは次のように来る:私が達成したいのですがどのような
Select Top 10 * From DataBase..Table
は、「データベース」または以前の「..」の文字列でのテキストを取得することです。
はまた、時々、クエリは次のように来る:
Select Top 10 * From DataBase.Schema.Table
それは両方のケースで、「データベース」の文字列を取得することはできますか?
ここで私がしようとしてきたことはありますが、私は正規表現でそれほど良くありません。
([A-Z]+\.+?([A-Z])*(\.)+[A-Z])
しかし、これは、以下の(角括弧で)一致した:助けのため
Select Top 10 * From [DataBase..T]able
感謝を!
編集: これはC#で行われ、クエリ/リクエストをデータベースに送信する前に、このAPIメソッドが処理するすべてのリクエストを記録しようとしています。
SQLは複雑な言語であり、正規表現のような直接的な文字列の手法で解析すると危険があります。最も信頼できる方法はSQLパーサを使用することです。あなたの具体的な例題に関する具体的な質問については、キーワード「From」を使用してパターンを開始し、任意の数の空白の後にドットではないすべてのもの(キャプチャグループ内)を取得することをお勧めします。 –
これはc#で行われます。リクエストをキャッチしてデータベースに問い合わせる前にファイルにログインするAPIです。これはSQL Serverで行われていません。申し訳ありませんが、わからない場合は、 –
データベース名には、ドットを含む任意の文字を使用できます。より一般的で素朴な方法は、 "from"と "。"の間で部分文字列を見つけることですが、データベースには[FROM。 ] ' – Slai