2016-11-23 79 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

相关问题