Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 正则表达式搜索两个模式字符串并剪切什么';介于_C#_.net_Regex - Fatal编程技术网

C# 正则表达式搜索两个模式字符串并剪切什么';介于

C# 正则表达式搜索两个模式字符串并剪切什么';介于,c#,.net,regex,C#,.net,Regex,我正在尝试编写一个小的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

我正在尝试编写一个小的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
我的helper方法应该将两者之间的所有内容都切掉

--ignore

结果字符串应如下所示:

DECLARE @V1 INT

DECLARE @V2 INT


SELECT * From Employee ORDER BY LastName

如何使用
RegEx
实现我的结果?

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

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

以下是一个简短的示例:

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);
    }
}
注意使用,以便
匹配任何字符,包括
\n


我在这里使用了Windows行分隔符,但是如果希望能够处理Unix分隔符,可以将回车设置为可选。我想确保令牌在它们自己的行上,以避免SQL中的任何恶意引用,即使这不太可能发生。

下面是一个简短的示例:

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);
    }
}
注意使用,以便
匹配任何字符,包括
\n


我在这里使用了Windows行分隔符,但是如果希望能够处理Unix分隔符,可以将回车设置为可选。我想确保令牌在它们自己的行上,以避免SQL中的任何恶意引用,即使这不太可能。

感谢您的帮助。如果存在多个--ignore/--endignore block,我仍然有一个问题。现在修复了使
*
不情愿的问题。Environment.NewLine呢?@Petar:这只是确定了当前操作系统的行分隔符-它可能不是文件中使用的行分隔符。@Jon。现在一切正常。谢谢你是我的英雄,谢谢你的帮助。如果存在多个--ignore/--endignore block,我仍然有一个问题。现在修复了使
*
不情愿的问题。Environment.NewLine呢?@Petar:这只是确定了当前操作系统的行分隔符-它可能不是文件中使用的行分隔符。@Jon。现在一切正常。谢谢你是我的英雄:-如果你不介意的话,你可以发布一个小的代码示例。谢谢。如果你不介意的话,你可以发布一个小的代码示例吗。非常感谢。