1

次のように渡すことができるカスタマイズされたクエリ言語を持つサイトがあります。

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

さて、私はかなり複雑な正規表現を使用して同様のコード ファイルを解析できることを知っています...しかし、クエリには 50 もの異なる方法がある可能性があり、人々がネストされた括弧を使用して検索すると、ばかげて悪くなります。物事のために。

そのような文字列を自動的に解析する PHP ライブラリはありますか? または、このような潜在的に複雑なものを解析するためのベスト プラクティスはありますか? (複雑に見える YAML を見つけていますが、それが答えかもしれません。)

4

1 に答える 1

1

これは、特にこのような括弧で囲まれた部分式を使用する場合は、思ったよりも少し複雑になりますが、これを論理的な用語に分解して、RPN/postfixのようなスタックにプッシュする必要があります。修正された操車場アルゴリズムを使用した表記算術

ステートメントでの明示的な判断から、検索クエリではor他のすべてを一緒に編集する必要があると思います。andこのため、andとして表現します。あなたの表現は次のようになります。+or*

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

RPN/後置でこのようなものにする必要があります

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

strtok [先頭/末尾の空白のない括弧と一致する引用符を処理する特別な場合]を使用して文字列を反復処理し、論理構造を構築して、任意の言語でクエリ式を構築することができます。お気に入り。

この方法で行うのは少し複雑かもしれませんが、最終的には、ステートメントを無限にネストしたり、他の演算子や関数を組み込んだりすることができます。

于 2012-11-02T21:13:06.497 に答える