2016-11-23 7 views
0

特定の文字列に対してSQLストアドプロシージャ全体を検索する必要があります。プロシージャ内の各行は配列内の配列位置に入力されています。私がする必要があるのは、配列の各エントリを特定の部分文字列で検索することです。この場合、 "EXEC SP_MYSP_"を検索します。 (これは、すべてのストアドプロシージャの接頭辞の例です)。文字列に "EXEC SP_MYSP_"が含まれている場合は、カウンタをインクリメントしたい(これは非常に簡単です)が、ストアドプロシージャ名をリストに追加したい。スペース区切り文字を打つと、ストアドプロシージャ名の残りの部分を読み込み、読み込みを停止する方法はありますか?もし誰かが大いに感謝するいくつかのアドバイスを提供することができた!文字列に部分文字列が含まれている場合は、文字列全体を "space" delimeterまで収集します

コードはかなりシンプルですが、誰かが私が上で説明しようとしていたものを誰にでも見させるためにコードを追加します。次のように

if (stringValue.Contains("EXEC SP_MYSP_")) 
{ 
    count++; 

    //Get the entire stored procedure name. 
} 
+1

「stringValue」には実際に何が含まれていますか? – ChrisF

+0

stringValueは、現在表示している文字列です。私はNewLines上でストアドプロシージャ全体を分割し、各テキスト行を配列に配置します。テキストの各行について、私は上記で入力したステートメントを行います。 – TheJavaLearner

+0

これは、一致する文字列を含む行の例または少なくとも形式を示すのに役立ちます。現時点では、私たちはただ推測しています。 – ChrisF

答えて

0
// using System.Text.RegularExpressions; 

private Regex pattern = new Regex(@"EXEC SP_MYSP_([^\s]+)", RegexOptions.IgnoreCase); 

private bool TryMatchName(string input, out string name) 
{ 
    var match = pattern.Match(input); 
    if (match.Success) 
    { 
     name = match.Groups[1].Value; 
     return true; 
    } 
    else 
    { 
     name = null; 
     return false; 
    } 
} 

は、このメソッドを呼び出します。

const string input = "EXEC SP_MYSP_FOO 1, 2, 3;"; 
string name; 
bool nameFound = TryMatchName(input, out name); 

正規表現EXEC SP_MYSP_([^\s]+)次のような意味があります。

  • 試合リテラルストリングEXEC SP_MYSP_
  • が続くと1つ以上(([^…])空白文字(\s)、
  • ではなく、入力の一部をグループ((…))にキャプチャして、match.Groupsを使用して抽出することができます。
+0

助けてくれてありがとう。私は、行をとって新しい単語を単語に入れて別の方法でやり始めました。私はREGEXがどのように動作するかについてはよく知っているわけではありませんが、上記のものが私を助けてくれます! – TheJavaLearner

+0

@ TheJavaLearner:正規表現の簡単な説明を追加しました。うまくいけば、それはその方法の中で起こっていることを少し明確にします。 – stakx

+0

です!ご説明ありがとうございます。 – TheJavaLearner

関連する問題