gpt4 book ai didi

php - 在 PHP 中解析自定义搜索语法?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:09:48 25 4
gpt4 key购买 nike

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

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

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

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

最佳答案

这比您想象的要复杂一些,特别是如果您要像这样使用带括号的子表达式,但您可能需要将其分解为逻辑项并将其压入堆栈,例如RPN/postfix notation arithmetic使用修改后的 Shunting-Yard algorithm .

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

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

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

关于php - 在 PHP 中解析自定义搜索语法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13202344/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com