0

次のようなストアド プロシージャが定義されたファイルがあります。

CREATE        PROCEDURE [XXXX].[procedure_name_here]

これまでの私の正規表現は次のとおりです。

\.\[.*\]+.*

参考: http: //rubular.com/r/Z0FiI78bqF

100%正しいとは思えないので、助けが必要です。

注: [xxxx]. 一部は存在する場合と存在しない場合があります(オプション)が、CREATEという単語が存在する必要があります。そうでない場合、ストアドプロシージャを呼び出す別のストアドプロシージャになります。実際の定義を探しているだけです。

4

2 に答える 2

2

ドットの直後の角括弧の間にあるプロシージャ名を信頼できる場合は、次のように記述できます。

\.\[(.*?)\]

括弧は、プロシージャ名の文字列をキャプチャします。

ドットがオプションである場合、または行がプロシージャ定義であることをさらに確認する必要がある場合は、次を使用します。

CREATE\s+PROCEDURE\s+(?:\[.*?\]\.)?\[(.*?)\]
于 2012-05-23T18:40:20.127 に答える
-1

SQL は通常の言語ではありません。つまり、正規表現では正しく解析できません。SQL 用の正しいパーサーを作成することは確かに可能であり、関心のある SQL のサブセット用の正しいパーサーを作成することは確かに可能です。しかし、正規表現だけではそれができません。

正規表現を推測として使用できます。ただし、正規表現の選択によっては、正規表現が一部のテキストが SQL として有効ではない場合に有効であると示す偽陽性と、実際には一部のテキストが SQL として無効であると正規表現が示す偽陰性の両方が発生します。完全に有効です。

つまり、SQL の正しいパーサーを作成するか、最善の推測を行う正規表現を作成し、その正規表現を渡すようにすべての SQL ファイルを作成する必要があります。

于 2012-05-23T18:49:31.163 に答える