如果字符串包含子字符串,然后收集整个字符串直到“空格”的分隔符
我必须搜索整个SQL存储过程中的某些字符串。过程中的每一行都已输入数组中的数组位置。我需要做的是搜索数组中的每个条目的特定子字符串,在这种情况下,我想搜索“EXEC SP_MYSP_”。 (这是所有存储过程如何加上前缀的例子。)如果字符串包含“EXEC SP_MYSP_”,那么我想增加一个计数器(这很容易做到),但我也想将存储过程名称添加到列表中。有没有办法读取其余的存储过程的名称,并停止阅读,一旦我打空格分隔符?如果有人可以提供一些建议,将不胜感激!如果字符串包含子字符串,然后收集整个字符串直到“空格”的分隔符
代码非常简单,但我会添加它以防止任何人看到我上面想要解释的内容。
if (stringValue.Contains("EXEC SP_MYSP_"))
{
count++;
//Get the entire stored procedure name.
}
// 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
。
感谢您的帮助。我开始以不同的方式做到这一点,将每一个单词放入一个新的数组中。我对REGEX的工作方式并不是非常熟悉,但您的上述帮助我解决了问题! – TheJavaLearner
@TheJavaLearner:我加了一个正则表达式的简单解释。希望它能让这个方法里面的内容更清晰一些。 – stakx
它呢!谢谢你的解释。 – TheJavaLearner
'stringValue'实际包含什么? – ChrisF
stringValue是我正在查看的当前字符串。我将NewLines上的整个存储过程分割并将每行文本放入一个数组中。对于每一行文本,我都会执行上面输入的声明。 – TheJavaLearner
这将有助于显示一个示例或至少包含您匹配的字符串的行的格式。目前我们只是猜测。 – ChrisF