2017-04-10 3 views
1

私はこのようなSQL文を持っています。C#regex:xで始まりyで終わる文字列とマッチします。末尾の部分は含まず、最後のパターンと一致します。

SELECT distinct [testCountry].[Division] as c0 
FROM (....) AS testCountry 
WHERE ([testCountry].[Division] <> '' and [testCountry].[Division] is not null) 
ORDER BY [testCountry].[Division] asc 

(....)の部分は、他のSQLステートメントを含むだけでなく、キーワードSELECT, WHERE, ORDER BYを含むことができます。 ここで最後のWhere句を削除したいと考えています。WHERE ([testCountry].[Division] <> '' and [testCountry].[Division] is not null)

どのように正規表現を作成しますか?

私はこのようなSTH試してみた:

string res = Regex.Replace(originalSql, @"(WHERE[\S\s]*?)(ORDER BY)", "$2"); 

をそれはORDER BYに続く他の場所にあるすべてのWHEREを削除します。 正規表現をより簡潔に書く方法もありますか?

ありがとうございました!

+0

ドット '.'の代わりに' [\ S \ s] 'を使う理由は? – juharr

+0

元のSQL文には、SQLサーバ管理スタジオ – strisunshine

+0

に表示されるような改行があります。ドットが改行に一致する必要があるかどうかを伝えるための設定があります。 – juharr

答えて

2

あなたが他のWHERE Sと一致する場合は、それらを交換する心配する必要はありません。貪欲な試合の性質によって

string res = Regex.Replace(originalSql, @"(.*)(WHERE[\S\s]*?)(ORDER BY)", "$1$3"); 

を試してみて、これが最後のWHERE句が一致していることを保証します。

記録的には、Joshua's approachが好きです。できるだけ正規表現を避け、あなたの後に来る者(将来の自己を含む)は感謝します。

+0

ありがとう! *を[\ S \ s] *に変更しましたが、私は簡潔な方法でやりたいことを達成すると思います:) – strisunshine

+0

これは機能しますか?私には貪欲に思えるので、テストしましたか? –

+1

[シングルラインモード](https://msdn.microsoft.com/en-us/library/system.text.regularexpressions.regexoptions(v = vs.110).aspx)を使用している場合は、引き続き '.'を使用できます。 。 – JDB

2

私はこれがあなたが要求したような正規表現の解決法ではないことを知っていますが、解決策です。

var sql = "WHERE THIS = THIS WHERE this = that "; 

var index = sql.LastIndexOf("WHERE"); 

var sqlnew = sql.Substring(0, index); 

最後のWHERE文を削除するために上記を使用できます。それで、最後にwhere文を追加する方がはるかに簡単です。

また、最後のWHERE文を取得して、必要なものをより簡単に正規表現にすることができます。その後

var whereStatement = sql.Substring(index, sql.length); 

あなたが与えた例を望む結果を得る..

string res = Regex.Replace(whereStatement , @"(WHERE[\S\s]*?)(ORDER BY)", "$2"); 
+0

ありがとうございます。それは役に立ちましたが、それ以降は何かを残しておく必要がありますが、どこの句 – strisunshine

+0

でも準備ができています。私は私の投稿を修正しました。あなたは最後の文と正規表現を得ることができます。必要なもの –

+0

@strisunshine 'sql.Substring(0、sql.LastIndexOf(" WHERE "))+ sql.Substring(sql .LastIndexOf( "ORDER BY")); '私の意見では、正規表現よりも読みやすくメンテナンスが簡単です。 – JDB

関連する問題