C# 最佳通配符搜索正则表达式?

C# 最佳通配符搜索正则表达式?,c#,regex,asp.net-mvc,C#,Regex,Asp.net Mvc,我正在尝试创建一个正则表达式,允许人们使用“*”作为通配符进行搜索,据我所知,这是相当标准的。对于当前正则表达式,我有以下内容: @"($([a-zA-Z0-9!\@#\$%\^&\(\)-_\+\.'`~/=\?\{\}\|]){6,255}|([\w]){0,0})" 当我运行代码并尝试使用通配符进行搜索时,它告诉我“至少需要一个字符”,这让我相信它只读取通配符部分,而不是包含所有字符的第一部分。我在这个正则表达式中做错了什么 顺便说一下,这是一个C#中的ASP.NET MVC 3

我正在尝试创建一个正则表达式,允许人们使用“*”作为通配符进行搜索,据我所知,这是相当标准的。对于当前正则表达式,我有以下内容:

@"($([a-zA-Z0-9!\@#\$%\^&\(\)-_\+\.'`~/=\?\{\}\|]){6,255}|([\w]){0,0})"
当我运行代码并尝试使用通配符进行搜索时,它告诉我“至少需要一个字符”,这让我相信它只读取通配符部分,而不是包含所有字符的第一部分。我在这个正则表达式中做错了什么

顺便说一下,这是一个C#中的ASP.NET MVC 3项目

编辑:::此正则表达式是MVC 3项目中ViewModel的一部分,正则表达式是ViewModel中某个属性的数据注释的一部分。我不想把代码放在任何地方,而是放在数据注释中,这就是为什么它是一行代码。这是上面代码的完整注释:

[RegularExpression(@"($([a-zA-Z0-9!\@#\$%\^&\(\)-_\+\.'`~/=\?\{\}\|]){6,255}|([\w]){0,0})", ErrorMessageResourceType = typeof(AdminResource), ErrorMessageResourceName = "SearchWildcardError")]

这看起来相当复杂,如果我理解正确,那么您希望实现通配符搜索并在下面使用正则表达式

所以如果用户输入hel*oo

像helcopteroo这样的东西会匹配,或者只是heloo

所以我会做一些类似的事情:

Regex reg = new Regex(@"hel[a-zA-Z0-9]*oo", RegexOptions.IgnoreCase);
var matches = reg.Matches("helloo hel022oo helcoopter");

您只需要根据输入生成传递给正则表达式构造函数的搜索模式,您会发现,正则表达式本质上比通配符灵活得多,因此不像单数
*
表示“任意长度的任何字符”那么简单

在正则表达式中,最接近通配符的是
,但如果不量化长度,它将始终只匹配任何字符的一个实例

显然有很多方法可以量化正则表达式
{3}
*
+
甚至
++

复制通配符的最简单方法是使用
+
,因为它声明您可以找到1到无限次之间的任何内容。如果您想让它成为可选的,那么可以使用
*


如果您想要传统类型的通配符,那么regex就不是它的工具。

因此,我通过仔细查看我的代码找到了答案。最后我把它分成了两个不同的正则表达式。一个用于用户名:

@"($(\w@\.){6,255}|([a-zA-Z0-9!\@#\$%\^&\(\)-_\+\.'`~\/=\?\{\}\|]){2,50}|([\w]){0,0})"
这仍然允许正常搜索,并使用通配符和我需要的所有特殊字符。此错误未正确转义“/”。这个现在很好用。用于电子邮件的第二个正则表达式:

@"($(\w@\.){1,50}|([a-zA-Z0-9@\*\._]){2,50}|([\w]){0,0})"
仅允许几个特殊字符,并且仍然允许通过通配符进行搜索,但必须包含“@”符号才能使其成为有效搜索

另外,我发现了一个漂亮的链接,可以让你测试正常工作的正则表达式,如果有人需要它,你可以在这里找到:
这个小工具很好用

假设用户输入了
ter*tor