[英]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.