1

有一个网站有一个定制的查询语言,可以像这样传递:

o:target o:creature (r:mythic or r:rare) t:"artifact creature"

现在,我知道我可以使用一个相当复杂的正则表达式来解析类似的代码文件......但是可能有多达五十种不同的查询方式,当人们使用嵌套括号来搜索时,这会变得非常糟糕为了这些事。

那么:是否有一个 PHP 库可以自动解析这些字符串?或者是否有解析此类潜在复杂事物的最佳实践?(我正在寻找 YAML,这似乎很复杂,但这可能就是答案。)

4

1 回答 1

1

这比您想象的要复杂一些,特别是如果您要使用这样的括号子表达式,但是您可能需要将其分解为逻辑术语并将其推送到诸如RPN/postfix之类的堆栈中使用改进的Shutting-Yard 算法的符号算术

根据您在声明中的明确判断,or我假设其他所有内容都应该and在搜索查询中一起编辑。为此,我们将表示andas+oras *,您的表达式将等效于:

o:target + o:creature + ( r:mythic * r:rare ) + t:"artifact creature" 

在 RPN/postfix 中应该是这样的

o:target o:creature + r:mythic r:rare * + t:"artifact creature" +

您可能希望使用 strtok [使用特殊情况来处理没有前导/尾随空格以及匹配引号的括号] 来遍历字符串,以构建一个逻辑结构,然后您可以使用该结构以您使用的任何语言构建查询表达式喜欢。

这样做可能有点复杂,但最终理论上您可以无限嵌套语句,以及合并其他运算符或函数。

于 2012-11-02T21:13:06.497 回答