正则表达式&x2B;MongoDB中的选项(C#驱动程序)

正则表达式&x2B;MongoDB中的选项(C#驱动程序),c#,regex,database,mongodb,C#,Regex,Database,Mongodb,我正在使用C#的MongoDB驱动程序,我正在进行查询,以便从集合中获取与字段匹配的项目列表 我将BsonRegularExpression对象与以下表达式一起使用: "/.*" + summonerName + "/" 这相当于Sql中的LIKE,但当我希望它不区分大小写时,问题就出现了。 要做到这一点,许多网站评论说,它必须是这样的: BsonRegularExpression expReg = new BsonRegularExpression(&

我正在使用C#的MongoDB驱动程序,我正在进行查询,以便从集合中获取与字段匹配的项目列表

我将BsonRegularExpression对象与以下表达式一起使用:

"/.*" + summonerName + "/"
这相当于Sql中的LIKE,但当我希望它不区分大小写时,问题就出现了。 要做到这一点,许多网站评论说,它必须是这样的:

BsonRegularExpression expReg = new BsonRegularExpression("/.*" + summonerName + "/", "i");
当我在表达式后面加上options参数:“I”时,它不会返回任何内容

我将整个代码留在这里:

public static List<Summoner> GetSummonerByName(String summonerName)
    {
        try
        {
            var database = dbClient.GetDatabase(databaseName);
            var collection = database.GetCollection<Summoner>(collectionSummoner);

            String nombreRegex = "";
            var nombreChar = summonerName.ToCharArray();
            foreach(Char caracter in nombreChar)
            {
                nombreRegex += "*";
                nombreRegex += caracter;
            }

            //var filter = Builders<Summoner>.Filter.Regex(u => u.name, new BsonRegularExpression("/.*C*o*r*b*a*n/"));
            BsonRegularExpression expReg = new BsonRegularExpression("/.*" + summonerName + "/");
            var filter = Builders<Summoner>.Filter.Regex(u => u.name, expReg);

            var resultado = collection.Find(filter).ToList();

            if(resultado.Count() == 0)
            {
                InsertSummoner(RiotApiConnectorService.GetSummonerByName(summonerName));
                GetSummonerByName(summonerName);
            }

            return resultado;
        }
        catch (Exception error)
        {
            return null;
        }
    }
publicstaticlist getcourderbyname(stringcourdername)
{
尝试
{
var database=dbClient.GetDatabase(databaseName);
var collection=database.GetCollection(collectionSummoner);
字符串nombregex=“”;
var nombreChar=calluername.ToCharArray();
foreach(nombreChar中的字符)
{
nombregex+=“*”;
nombreRegex+=字符;
}
//var filter=Builders.filter.Regex(u=>u.name,新的BsonRegularExpression(“/.*C*o*r*b*a*n/”);
BsonRegularExpression expReg=新的BsonRegularExpression(“/.*”+召唤名称+“/”);
var filter=Builders.filter.Regex(u=>u.name,expReg);
var resultado=collection.Find(filter.ToList();
如果(resultado.Count()==0)
{
插入召唤器(RiotApiConnectorService.getCallourerByName(召唤器名称));
GetCallerByName(传唤名称);
}
返回resultado;
}
捕获(异常错误)
{
返回null;
}
}
有没有人有在C#中的mongo驱动程序中使用正则表达式的经验?
提前谢谢

您应该将其定义为

BsonRegularExpression expReg=w BsonRegularExpression(Regex.Escape(召唤名),“i”)
这里的要点是,
BsonRegularExpression
regex定义不应该包括regex分隔符,在您的例子中,
/
。regex实例化是使用
BsonRegularExpression
类执行的,regex分隔符只是多余的,在这里被视为模式中的literal
/
。没有匹配项,因为您的数据没有斜杠

接下来,这里不需要
*
,因为regex在输入文本中的任何位置搜索匹配,它不需要完整的字符串匹配(就像
LIKE
操作符一样)


Regex.Escape(召唤名称)
仅在
courderName
中存在特殊的Regex元字符时使用,如果不使用该方法,搜索可能会失败。

尝试使用
新的BsonRegularExpression(Regex.Escape(召唤名称),“i”)
@WiktorStribiżew现在正在工作,但缺少like操作符。如何在Regex.Escape中从SQL中添加LIKE运算符?您所说的“添加LIKE”是什么意思
LIKE
不是正则表达式运算符,您不需要它。@WiktorStribiżew我的意思是,正则表达式中SQL中的等效LIKE运算符,类似于%courderName%的东西,您不需要
%
,因为正则表达式查找部分匹配(它不需要匹配整个字符串)。