1

我想在实体框架上构建一个关键字格式的搜索功能。

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

谢谢你的建议。

4

1 回答 1

3

是的你可以。您必须创建一个正则表达式列表来检查和循环它们,直到找到匹配项。(确保正确排列它们的优先级。)

例如,要确定搜索查询是否正在查询标签,您可以使用以下正则表达式:

string query = "[tag]";
bool isTag = Regex.IsMatch(query, @"^\[.+?\]$");

这是另一个匹配用户 ID 的正则表达式:

string query = "user:1234";
var match = Regex.Match(query, @"^user:(\d+)$", RegexOptions.IgnoreCase);

请注意,您应该query先修剪。

于 2013-09-30T15:36:41.187 回答