代码之家  ›  专栏  ›  技术社区  ›  gsharp

regex搜索两个模式字符串并剪切

  •  0
  • gsharp  · 技术社区  · 15 年前

    我在写一个小的SQL助手。我有一个这样的查询存储在一个字符串中:

    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 回复  |  直到 13 年前
        1
  •  3
  •   Jon Skeet    15 年前

    下面是一个简短的例子:

    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中的任何恶意引用,即使这是非常不可能的。

        2
  •  1
  •   Mehran ShankarSangoli    15 年前

    再次匹配字符串“--ignore.+--endignore”,并使用string.replace将其替换为string.empty。