【问题标题】:how to parse a search query string like SO [closed]如何解析像这样的搜索查询字符串 [关闭]
【发布时间】:2013-09-30 15:31:50
【问题描述】:

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

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

谢谢你的建议。

【问题讨论】:

  • 你可以。或者,您可以只使用String.Split()
  • 我不明白您的原始搜索数据会是什么样子。从字面上看是一个查询字符串,如?something=value&anotherThing=another Value?
  • 如果可以遍历查询字符串,为什么还要解析它? msdn.microsoft.com/de-de/library/…

标签: c# sql regex entity-framework parsing


【解决方案1】:

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

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

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

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

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

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

【讨论】:

  • 也许我应该更多地了解正则表达式,以便能够分析所有案例。谢谢建议
猜你喜欢
  • 2013-07-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-09
  • 1970-01-01
  • 1970-01-01
  • 2012-09-18
  • 1970-01-01
相关资源
最近更新 更多