[英]How to parse a search term into the various question types?
我正在编写一个内部应用程序,我们让用户做几种不同类型的查询。
该应用程序允许用户通过以下任一键搜索数据库:
蛮力的方法是简单地为每种类型的查询创建一个webform,并有一个菜单,用户可以选择要执行的查询类型(这是ASP.NET)
但我想要的是有一个简单的文本框,用户输入查询,然后应用程序应解析查询并自动选择要发送到后端的查询类型。
例如,employeeId是一个精确格式的数字。 所以我可以做一个正则表达式来匹配它。 对于status,companyId等也是如此。
所以我的问题是,如果这里有人可以提供一些建议,如何在C#中最好地编写一个方法,它将采用一个字符串并将其与许多不同的正则表达式进行匹配。
干杯,Joakim
直接的方法是让一系列if
语句依次测试每个正则表达式:
if (Regex.Match(query, regex1)) {
HandleFirstCase(query);
} else if(Regex.Match(query, regex2)) {
HandleSecondCase(query);
} ...
else {
HandleFullTextSearch();
}
更复杂的方法是数据驱动方法,您可以将正则表达式和操作存储在表中并循环遍历它们:
public class RegexAction {
public Regex Pattern { get; private set; }
public Action<string> Handler { get; private set; }
public RegexAction(Regex pattern, Action<string> handler) {
this.Pattern = pattern;
this.Handler = handler;
}
}
public static RegexAction[] HandlerTable = new RegexAction[] {
new RegexAction(regex1, HandleFirstCase),
new RegexAction(regex2, HandleSecondCase),
new RegexAction(regex3, HandleThirdCase),
// ...
}
foreach(RegexAction action in HandlerTable) {
if (action.Match(query)) {
action.Handler(query);
break;
}
}
这有助于将重要数据,模式和操作与测试和调用的实现分开。
看看这个问题:
有效地查询一个字符串与多个正则表达式。
我要做的只是一个OR查询:
select * from employee where employeeId = search OR name like "%search%" OR status = "search"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.