分析布尔运算符的字符串

时间:2015-02-03 13:47:26

标签: c# .net string

我正在尝试为我的某个程序创建搜索功能,我的计划是让用户使用类似的内容搜索内容

((network || system) && (ip || dns || bios)) && (version || name)

所以只要字符串匹配此搜索词,如

NETWORK: ****** DNS: ******* NAME: *******

SYSTEM BIOS VERSION: ****

它会识别它。

但我无法弄清楚如何实现这一点。

我考虑过整个搜索术语并将其分成几部分,但由于我不知道有多少AND或OR会在那里,我不知道该怎么做。

2 个答案:

答案 0 :(得分:3)

为了做到这一点,您需要的不仅仅是一些字符串比较。实际上,你正在寻找一个解析器,它可以解析语句并形成一些可以理解的东西,无论是否适合你。

我建议你看看ANTLR,它是一个解析器/词法分析器。它也有C#的模板。

答案 1 :(得分:1)

你可以做两件事:

  1. 将自己限制在简单的案例中,例如" abc&& DEF"那么你 可以使用简单的字符串操作
  2. 复杂的表达式(如你的问题),那么你需要一个解析器。
  3. 自己写一个简单的解析器并不是很难(如果你对它背后的理论有足够的了解)。否则使用像@Patrick suggested(ANTLR)这样的现成工具包,它也涉及相当多的学习曲线。