正则表达式首先发现两个字符串中的任何一个C#

时间:2015-05-12 07:05:27

标签: c# regex

我需要找出" AND"和/或" OR"存在于我的字符串中,如果存在,请用" WHERE"替换第一个匹配项。

实施例

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

AND item = 'blah' OR product = 'foo' 并将替换为WHERE。

OR item = 'blah OR item = 'foo' 第一次出现的OR将替换为WHERE。

如果既不存在AND也不存在OR,则保持字符串不变。

如果字符串包含AND和OR,我有以下内容可用,但如果字符串仅包含AND,则它不起作用,因为y等于-1而x < y总是为假。它一直在做我的头,加上它在这里的晚些时候,任何目前被控咖啡因的人的帮助将不胜感激。

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);
}

编辑为了响应@Luaan,我知道SQL注入并通过正确的方式添加参数采取了正确的步骤,但是我已经排除了那部分代码,因为它有与我的问题无关。在这个阶段,我只需要构建字符串。

干杯。

2 个答案:

答案 0 :(得分:2)

使用正则表达式

AND|OR

搜索AND或OR然后使用正则表达式Replace方法的this重载,如下所示,以确保只替换第一个:

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

答案 1 :(得分:1)

你可以匹配:

onicecandidate

它将在^(AND|OR)(.*) 的开头搜索ANDOR。您只需使用string替换第一个捕获:

where

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

^