2012-02-23 7 views
4

私は、作成関数やストアプロシージャなどのコマンドを含む一種の大きなSQLスクリプトを解析しようとしています。 GO文が見つかるたびに文字列でファイルを分割したい(SMOの代わりに通常のADO.NETを使用して実行したい)。正規表現を使用してSQLスクリプトファイル内のすべてのGOを削除する

問題は、それまでのところ適切な正規表現が見つからないということです。大文字小文字を区別しないで簡単に\bGO\bを使用すると、分割されます。しかし、またすべてが

のようなコメント内(複数可)に行く分割します - これは行くことも、ほとんど私の問題を解決するが、私は2つの連続したGOを持っているとき、私はいくつかのエラーを取得し、この表現^\bGO\b[^--]$を使用して

を分割されます(それは何らかの理由でそこにあり、私のドメインの後ろにある)。

end 
go 
GO 

これは、スクリプトの作成がスクリプト内でどのように見えるかを示しています。

私はC#で

どうもありがとう

** EDITそれをやっている

**

同僚は今のところ、すべてのために働いて、解決策を考え出しました私のスクリプト

^\s*go\s*\r\n

+0

詳しい情報は、私たちはあなたにこのため、「やる-すべてを」正規表現パターンを与えるようにするために必要とされます。ここでは

は、私が使用したテストケースです。ちょうど一般的に、私はこれのための "サンドボックス"ユニットテストを設定します。削除したくないGOのパターンを含むリテラルを設定し、それらのパターンのそれぞれに「候補」正規表現アルゴリズムを適用し、結果のテキストがあなたが望むものであると主張します。あなたの特定の正規表現を渡したり失敗したりするテストは、正規表現を変更する方法の手がかりになるはずです。あなたが行ったり削除したくないパターンの例をもっと教えてくれれば、私たちがあなたを助けてくれるでしょう。 – KeithS

+0

@Andres少し話題外です:** '^ \ bGO \ b [^ - ] $' **は本当に動作しますか?私は、あなたが〜を避けたいと思うかもしれないと思っています。 – GolfWolf

+0

@KeithSは、SP、関数、ビューを作成するすべてのデータベースソースに適用されるため、例を挙げにくいです。しかし、基本的には非常に多様なSQLファイルソースです。私は/ * ... * /の間のコメント付きコードでいくつかの問題を抱えていただけでなく、 'go'動詞のような行のコメントのように - これは行くべきである... – Andres

答えて

3

いる部分削除:

(?i-msnx:\b(?<!-{2,}.*)go[^a-zA-Z]) 

意味が、それは2つの以上のダッシュが付いていない場合を行く文字列をマッハそれに続く何か。

これはトリックを行う必要があります!

編集は

編集は無視する文字/数字が続く「GO」(最後の試み:))と正規表現のツール

PSへのリンクを追加するために単語の境界でのみチェックを強制します:あなたが見つからない場合にはthisはREについての素晴らしいリソースです。

PS2:REオーサリング/テスト用This is a great tool

+0

乾杯アドリアーノ、しかし正規表現はこのような場所で失敗する: IPSAdmins TO C_MAIL_CATEGORIES ON ALL ALL ON C_MAIL_CAT_CONV_TYPES IPSAdmins TO GRANT GRANT私は、C_MAIL_CATE – Andres

+0

ON ALL ALL ON C_MAIL_CAT_CONV_TYPES IPSAdmins TO GRANT我々の友人レジナルド・フェレイラ・ダ・シルヴァが言うに使用するように私は、私が思うに、このウェブサイトを知っている GRANTを取得します"自分に賛成し、正規表現を学ぶ" :-) – Andres

+0

ねえ!ほぼ最終更新RE(それが動作を期待) – Vagaus

0

はC正規表現なしでこの最後のケースを扱いやすくする。

スクリプトを分割した後、あなたがこの試すことができString.IsNullOrWhitespace(part) == true

2

さて、あなたはおそらくすでに、私は正規表現を使用します、私が知っている「一部の人々は、問題に直面したとき、考える 『聞いた』今、彼らは2つの問題があります。 " パフォーマンスが大きな問題ではない場合、あなたは、単にトリミングラインがケースを無視して、「行く」と等しいかどうかを確認できます。正規表現を扱う時間を無駄にすることはありません。

1

これは本当に古い質問ですが、うまくいけば、これは他の誰かに役立つことがわかります。

これは私が使用する正規表現です:私はまだそれを破ることができていない

(^(go)[\s,;])|(^(go)$)|(;go)|(;)\s*(go) 

use SCRATCH 
GO; 
--go 
set nocount ON ;go; 
go 
' go ' 
'go' 
'go 
go' 
create table gonogo (go int null, nogo int null) 
GO 

insert INTO mungbean VALUES (1); go 
GO 
; 
select * from mungbean 
go 

go 
go; 
' 
go 
+0

私はどちらもGOTO someAnchor –

関連する問題