C# 正则表达式查找两个字符串C中任何一个的第一次出现#

C# 正则表达式查找两个字符串C中任何一个的第一次出现#,c#,regex,C#,Regex,我需要找出字符串中是否存在“AND”和/或“or”,如果存在,请将第一次出现的替换为“WHERE” 示例 和item='blah'并将替换为WHERE。 和item='blah'或product='foo'将替换为WHERE. 或item='blah或item='foo'第一次出现或将被WHERE替换。 如果不存在AND和nor或,则保留字符串原样。 如果字符串同时包含AND和OR,则可以使用下面的方法,但是如果字符串仅包含AND,则它不起作用,因为y等于-1并且x

我需要找出字符串中是否存在“AND”和/或“or”,如果存在,请将第一次出现的替换为“WHERE”

示例

和item='blah'
并将替换为WHERE。

和item='blah'或product='foo'
将替换为WHERE.

或item='blah或item='foo'
第一次出现或将被WHERE替换。

如果不存在AND和nor或,则保留字符串原样。

如果字符串同时包含AND和OR,则可以使用下面的方法,但是如果字符串仅包含AND,则它不起作用,因为y等于-1并且
x
总是为false。它一直在做我的头,加上它在这里已经很晚了,任何来自目前被控咖啡因的人的帮助都将不胜感激

private string ReplaceFilter(string filter)
{
    int x = filter.IndexOf("AND");
    int y = filter.IndexOf("OR");
    string regEsc = (x != -1 && x < y) ? "AND" : "OR";

    var regex = new Regex(Regex.Escape(regEsc));
    return regex.Replace(filter, "WHERE", 1);
}
私有字符串替换筛选器(字符串筛选器)
{
int x=过滤器的IndexOf(“和”);
int y=过滤器的IndexOf(“或”);
字符串regEsc=(x!=-1&&x
EDIT作为对@Luaan的回应,我了解SQL注入,并采取了正确的步骤,以正确的方式添加参数,但是我排除了代码的这一部分,因为它与我的问题无关。在这个阶段,我只需要构建字符串

干杯。

您可以在以下方面进行比赛:

^(AND|OR)(.*)
它将在
字符串的开头搜索
。您只需将第一个捕获替换为
,其中

string input = "AND x=AND;";
string output = Regex.Replace(input, @"^(AND|OR)(.*)", "where $2");
如果不希望仅匹配表达式以
开头的位置,请省略
^

(AND|OR)(.*)
您可以在以下方面进行匹配:

^(AND|OR)(.*)
它将在
字符串的开头搜索
。您只需将第一个捕获替换为
,其中

string input = "AND x=AND;";
string output = Regex.Replace(input, @"^(AND|OR)(.*)", "where $2");
如果不希望仅匹配表达式以
开头的位置,请省略
^

(AND|OR)(.*)
您可以在以下方面进行匹配:

^(AND|OR)(.*)
它将在
字符串的开头搜索
。您只需将第一个捕获替换为
,其中

string input = "AND x=AND;";
string output = Regex.Replace(input, @"^(AND|OR)(.*)", "where $2");
如果不希望仅匹配表达式以
开头的位置,请省略
^

(AND|OR)(.*)
您可以在以下方面进行匹配:

^(AND|OR)(.*)
它将在
字符串的开头搜索
。您只需将第一个捕获替换为
,其中

string input = "AND x=AND;";
string output = Regex.Replace(input, @"^(AND|OR)(.*)", "where $2");
如果不希望仅匹配表达式以
开头的位置,请省略
^

(AND|OR)(.*)
使用正则表达式

AND|OR
要搜索AND或or,请按如下所示使用regex
Replace
方法的重载,以确保只替换第一个:

var output = new Regex("AND|OR").Replace(input, "WHERE", 1);
使用正则表达式

AND|OR
要搜索AND或or,请按如下所示使用regex
Replace
方法的重载,以确保只替换第一个:

var output = new Regex("AND|OR").Replace(input, "WHERE", 1);
使用正则表达式

AND|OR
要搜索AND或or,请按如下所示使用regex
Replace
方法的重载,以确保只替换第一个:

var output = new Regex("AND|OR").Replace(input, "WHERE", 1);
使用正则表达式

AND|OR
要搜索AND或or,请按如下所示使用regex
Replace
方法的重载,以确保只替换第一个:

var output = new Regex("AND|OR").Replace(input, "WHERE", 1);


您真的在尝试构建这样的查询吗?你不担心SQL注入吗?所以如果有人想买一个
PANDA
,他会买一个
PWHEREA
?@Luaan在这个阶段,我只是在构建一个字符串,而不是创建一个SQL命令yetYeah,但为什么?只需使用一些可组合的形式,而不是使用字符串。即使从零开始,这也不难,而且有很多库允许您以可组合的方式处理SQL查询(如实体框架或LINQ到SQL,但也有相当小范围的项目)。您创建的问题比通过将字符串拼凑在一起解决的问题还要多——只需使用正确的类型而不是原语。相信我,尽管我很想使用LINQ to SQL,但在我的情况下,我不能。您需要了解我的搜索功能的复杂性,以及为什么我需要使用字符串操作的“原始”方法。允许用户输入需要我操作字符串的各种类型的搜索模式。我在我的应用程序中尽可能多地实现LINQ,我希望在这里也能做到这一点,但事实并非如此。不过,谢谢你的输入。你真的想建立这样的查询吗?你不担心SQL注入吗?所以如果有人想买一个
PANDA
,他会买一个
PWHEREA
?@Luaan在这个阶段,我只是在构建一个字符串,而不是创建一个SQL命令yetYeah,但为什么?只需使用一些可组合的形式,而不是使用字符串。即使从零开始,这也不难,而且有很多库允许您以可组合的方式处理SQL查询(如实体框架或LINQ到SQL,但也有相当小范围的项目)。您创建的问题比通过将字符串拼凑在一起解决的问题还要多——只需使用正确的类型而不是原语。相信我,尽管我很想使用LINQ to SQL,但在我的情况下,我不能。您需要了解我的搜索功能的复杂性,以及为什么我需要使用字符串操作的“原始”方法。允许用户输入需要我操作字符串的各种类型的搜索模式。我在我的应用程序中尽可能多地实现LINQ,我希望在这里也能做到这一点,但事实并非如此。不过,谢谢你的输入。你真的想建立这样的查询吗?你不担心SQL注入吗?所以如果有人想买熊猫,他