Ruby 使用逻辑选项处理搜索关键字

Ruby 使用逻辑选项处理搜索关键字,ruby,string,Ruby,String,我想处理带有选项“和”、或“”和“not”,如“gis和gjs not gkp”,以对每个关键字执行搜索,并记录搜索逻辑 为此,我需要将搜索字符串按“”和“”、“”或“”和“”非“”分开,并记住在每个点使用的分隔符。我想把它转换成一个散列:{和'gis',和'gjs',而不是'gkp'} 最好的方法是什么?或者有更好的方法来处理这样的搜索字符串吗?键:和被复制并将被覆盖。你是对的。。所以我必须做一个和:我想应该指向一个数组。缩小,这是处理搜索字符串的正确想法吗?您需要特别的解决方案还是正确的解决

我想处理带有选项
“和”
或“
”和
“not”
,如
“gis和gjs not gkp”
,以对每个关键字执行搜索,并记录搜索逻辑

为此,我需要将搜索字符串按“
”和“
”、“
”或“
”和“
”非“
”分开,并记住在每个点使用的分隔符。我想把它转换成一个散列:
{和'gis',和'gjs',而不是'gkp'}


最好的方法是什么?或者有更好的方法来处理这样的搜索字符串吗?

:和
被复制并将被覆盖。你是对的。。所以我必须做一个和:我想应该指向一个数组。缩小,这是处理搜索字符串的正确想法吗?您需要特别的解决方案还是正确的解决方案?后者将涉及构建语法分析器。前者可能是用普通的、旧的、好的正则表达式来完成的。您的问题与布尔无关。你只有合取、析取和反运算,但你没有做任何布尔代数。嗨,sawa,理论上逻辑可能会变得更复杂,比如
(a或d)而不是(b或c)
-这就是你所说的布尔代数吗?如果有任何现有的方法/模块来处理这个问题,那就太好了。我用一种简单的方式编写字符串,因为我自己只能真实地处理简单的用例。这是一个好主意!有几个小问题:a。准备!不是一个有效的方法-我需要改用unshift(可能我使用的是旧版本的ruby?);B每个_片(2)。to_a似乎更容易分解数组;C正如Sagar指出的,如果有多个or/not/and,某些关键字将被覆盖。尽管如此,你的方式还是比我的好。我只需要做一点下游处理。非常感谢。
splitted = "hello and world or jump not read".split(/( and | or | not )/)
# => ["hello", " and ", "world", " or ", "jump", " not ", "read"]

splitted = splitted.unshift('and') unless splitted[0] == 'and'
# => ["and". "hello", " and ", "world", " or ", "jump", " not ", "read"]

splitted.each_slice(2).to_h
# => {"and"=>"hello", " and "=>"world", " or "=>"jump", " not "=>"read"}