2016-11-23 80 views
0

我必須搜索整個SQL存儲過程中的某些字符串。過程中的每一行都已輸入數組中的數組位置。我需要做的是搜索數組中的每個條目的特定子字符串,在這種情況下,我想搜索「EXEC SP_MYSP_」。 (這是所有存儲過程如何加上前綴的例子。)如果字符串包含「EXEC SP_MYSP_」,那麼我想增加一個計數器(這很容易做到),但我也想將存儲過程名稱添加到列表中。有沒有辦法讀取其餘的存儲過程的名稱,並停止閱讀,一旦我打空格分隔符?如果有人可以提供一些建議,將不勝感激!如果字符串包含子字符串,然後收集整個字符串直到「空格」的分隔符

代碼非常簡單,但我會添加它以防止任何人看到我上面想要解釋的內容。

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_
  • 隨後一個或多個(+),其不是字符([^…])任何空白字符(\s),
  • 並捕獲基團((…))在輸入的那部分,使得可以提取使用match.Groups
+0

感謝您的幫助。我開始以不同的方式做到這一點,將每一個單詞放入一個新的數組中。我對REGEX的工作方式並不是非常熟悉,但您的上述幫助我解決了問題! – TheJavaLearner

+0

@TheJavaLearner:我加了一個正則表達式的簡單解釋。希望它能讓這個方法裏面的內容更清晰一些。 – stakx

+0

它呢!謝謝你的解釋。 – TheJavaLearner

相關問題