我正在尝试编写一个小的SQL Helper。我有一个像这样的查询存储在一个字符串中:
DECLARE @V1 INT
--ignore
DECLARE @V11 INT
DECLARE @V12 INT
--endignore
DECLARE @V2 INT
--ignore
SELECT * FROM SampleTable
INNER JOIN AnotherSampleTable
......
--endignore
SELECT * From Employee ORDER BY LastName
我的助手方法应该切断
之间的所有内容--ignore
和
--endignore
结果字符串应如下所示:
DECLARE @V1 INT
DECLARE @V2 INT
SELECT * From Employee ORDER BY LastName
如何使用RegEx
实现我的结果?
答案 0 :(得分:3)
这是一个简短的例子:
using System;
using System.Text.RegularExpressions;
class Test
{
static void Main(string[] args)
{
string x = @"
A
--ignore
B
--endignore
C";
Regex regex = new Regex("\r\n--ignore.*?\r\n--endignore\r\n",
RegexOptions.Singleline);
string y = regex.Replace(x, "\r\n");
Console.WriteLine(y);
}
}
请注意RegexOptions.Singleline的使用,以便.
匹配任何字符,包括\n
。
我在这里使用了Windows行分隔符,但是如果你想要能够处理Unix分隔符,你可以使回车可选。我想确保令牌是自己的,以避免SQL中的任何恶意引用,即使这是非常不可能的。
答案 1 :(得分:1)
再次匹配你的字符串“--ignore。+ - endignore”并使用string.replace将其替换为string.empty。