Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 分析布尔运算符的字符串_C#_.net_String - Fatal编程技术网

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#的模板。

您可以做两件事:

  • 将自己限制在简单的情况下,如“abc&&def”,然后 可以使用简单的字符串操作
  • 复杂表达式(如您的问题中),则需要解析器
  • 自己编写一个简单的解析器并不难(如果您对其背后的理论了解足够的话)。否则,请使用现成的工具包,如(ANTLR),它还涉及相当多的学习曲线。

    您可以做两件事:

  • 将自己限制在简单的情况下,如“abc&&def”,然后 可以使用简单的字符串操作
  • 复杂表达式(如您的问题中),则需要解析器

  • 自己编写一个简单的解析器并不难(如果您对其背后的理论了解足够的话)。或者使用一个现成的工具包,比如(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: ****