如何解析像SO这样的搜索查询字符串

时间:2013-09-30 15:31:51

标签: c# sql regex entity-framework parsing

我想在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

谢谢你的建议。

1 个答案:

答案 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