我想在Entity Framework上使用关键字格式构建搜索功能。
void funcSearch(string keywork)
{
if (keywork == "[tag]")
{
//regex for is tag
//do search tag
}
if (keywork == "user:1234")
{
//regex for userid is 1234
//do search user with 1234
}
...
}
我可以使用正则表达式来解析像SO或任何方法的查询字符串格式吗?一个能够用相应的关键字分析所有案例的函数?
tags [tag]
exact "words here"
author user:1234
user:me (yours)
score score:3 (3+)
score:0 (none)
answers answers:3 (3+)
answers:0 (none)
isaccepted:yes
hasaccepted:no
inquestion:1234
views views:250
sections title:apples
body:"apples oranges"
url url:"*.example.com"
favorites infavorites:mine
infavorites:1234
status closed:yes
duplicate:no
migrated:no
wiki:no
types is:question
is:answer
谢谢你的建议。
答案 0 :(得分:3)
是的,你可以。您必须创建正则表达式列表以检查并循环它们,直到找到匹配项。 (确保正确排列它们的优先顺序。)
例如,要查明搜索查询是否正在查询标记,您可以使用以下正则表达式:
string query = "[tag]";
bool isTag = Regex.IsMatch(query, @"^\[.+?\]$");
这是另一个匹配用户ID的正则表达式:
string query = "user:1234";
var match = Regex.Match(query, @"^user:(\d+)$", RegexOptions.IgnoreCase);
请注意,您应首先修剪query
。