私は SiriProxy プラグインに取り組んでいます。すべての正規表現を構成ファイルに移動しようとしています。同じコマンドをトリガーする複数のフレーズ (つまり、正規表現) が存在する可能性があり、正規表現は、基になる関数を呼び出すために特定の値をキャプチャする必要があります。
動物関連の行動を記録するコマンドがあるかもしれません。そのために、次の 2 つのフレーズを使用したいと考えています。
the <mouse> was chased by the <cat>
the <cat> chased the mouse
ここで、「cat」と「mouse」は 2 つのパラメーターです。猫は追跡者、ネズミは追跡者であり、2 つのフレーズはこれらを異なる順序で使用しています。私の目標 (siriproxy プラグイン フレームワークを使用していることを思い出してください) は、キャプチャされたパラメーターの順序を無関係にすることです。
したがって、私の 2 つの正規表現は次のようになります。
/the (?<chasee>\w+) was chased by the (?<chaser>\w+)/i
/the (?<chaser>\w+) chased the (?<chasee>\w+)/i
2 つの用語は正しくキャプチャされますが、順番にキャプチャされます。SiriProxy フレームワークを使用して、listen_for コマンドを使用します。これを機能させることができます。
listen_for (/the (?<chasee>\w+) was chased by the (?<chaser>\w+)/i) { | chasee, chaser | record_animal_behaviour(chasee, chaser) }
listen_for (/the (?<chaser>\w+) chased the (?<chasee>\w+)/i) { | chaser, chasee | record_animal_behaviour(chasee, chaser) }
しかし、チェイシーとチェイサーの順序は | の間で入れ替える必要があります。文字。これを標準化して、正規表現のフレーズが何であるか、およびパラメーターの順序が問題にならないようにしたいと考えています。
パラメータを交換しようとすると、値も交換され、間違った動物が追跡者と追跡者になってしまいます。これは、listen_for コマンドが、名前付きのキャプチャ グループを関数呼び出しに渡す際にそれらを「尊重」しておらず、代わりに単に順序付けを行っているかのようです。
SiriProxy を使用するか、一般的な Ruby 正規表現を使用して、似たようなことに取り組んだ人はいますか? 用語を順番に強制するために正規表現自体でできることがあるかどうか、またはこれを達成するために listen_for コマンドを使用する別の方法があるかどうかはわかりません。