C# 分析布尔运算符的字符串
我正在尝试为我的一个程序创建一个搜索功能,我的计划是让用户用类似这样的东西搜索内容C# 分析布尔运算符的字符串,c#,.net,string,C#,.net,String,我正在尝试为我的一个程序创建一个搜索功能,我的计划是让用户用类似这样的东西搜索内容 ((network || system) && (ip || dns || bios)) && (version || name) 所以每当一个字符串匹配这个搜索词时 NETWORK: ****** DNS: ******* NAME: ******* 或 它会认出它的 但我不知道如何实现这一点 我曾想过将整个搜索词分解成几个部分,但由于我不知道其中会有多少个and或or,我不
((network || system) && (ip || dns || bios)) && (version || name)
所以每当一个字符串匹配这个搜索词时
NETWORK: ****** DNS: ******* NAME: *******
或
它会认出它的
但我不知道如何实现这一点
我曾想过将整个搜索词分解成几个部分,但由于我不知道其中会有多少个and或or,我不知道该怎么做。要做到这一点,你需要的不仅仅是一些字符串比较。实际上,您正在寻找一个解析器,它可以解析语句,并从中形成一些可以理解的内容,无论这是否适合您
我建议看一看,这是一个解析器/词法分析器。它也有C#的模板。要做到这一点,您需要的不仅仅是一些字符串比较。实际上,您正在寻找一个解析器,它可以解析语句,并从中形成一些可以理解的内容,无论这是否适合您 我建议看一看,这是一个解析器/词法分析器。它也有C#的模板。您可以做两件事:
自己编写一个简单的解析器并不难(如果您对其背后的理论了解足够的话)。或者使用一个现成的工具包,比如(ANTLR),它也涉及到一些学习曲线。您尝试过正则表达式吗?使用捕获组,解析复杂字符串可能是一种非常方便的方法。为什么不使用三个搜索变量而不尝试解析字符串?这样您就不必进行任何分析。@huMptyduMpty我知道在某种程度上需要String.Contains,但首先我必须拆分search语句以获得所需的字符串以及它们之间的关系@DStanley如果我理解正确,你的意思是这样的->
网络dns名称
,这与我的第一个示例相匹配?我会使用IndexOf而不是String.Contains(考虑大小写敏感度),但考虑到查询的复杂性,我建议使用解析器。@UrsKröll不,我是说使用单独的变量。为什么要让用户输入串联字符串。除非您希望以任何顺序支持和/或的任何组合,否则您需要一个词法分析器(这并不容易,需要大量测试)。您尝试过正则表达式吗?使用捕获组,解析复杂字符串可能是一种非常方便的方法。为什么不使用三个搜索变量而不尝试解析字符串?这样您就不必进行任何分析。@huMptyduMpty我知道在某种程度上需要String.Contains,但首先我必须拆分search语句以获得所需的字符串以及它们之间的关系@DStanley如果我理解正确,你的意思是这样的->网络dns名称
,这与我的第一个示例相匹配?我会使用IndexOf而不是String.Contains(考虑大小写敏感度),但考虑到查询的复杂性,我建议使用解析器。@UrsKröll不,我是说使用单独的变量。为什么要让用户输入串联字符串。除非您想以任何顺序支持和/或的任何组合,否则您需要一个词法分析器(这并不容易,需要大量测试)。ANTLR是一个不错的工具,但我担心它对OP来说有点复杂,尤其是在一个如此简单的需求上;)。如果第一行是搜索查询的示例,那么他确实需要更高级的东西。@Urs:需要更多帮助吗?ANTLR是一个很好的工具,但恐怕对OP来说有点复杂,尤其是在一个如此简单的需求上;)。如果第一行是搜索查询的示例,那么他确实需要更高级的东西。@Urs:需要更多帮助吗?
SYSTEM BIOS VERSION: ****