RegEx搜索两个模式字符串并剪切它们之间的内容

时间:2009-10-05 10:08:52

标签: c# .net regex

我正在尝试编写一个小的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实现我的结果?

2 个答案:

答案 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。