SMAPI文法をJSGFに変換しています。これらは、さまざまな音声認識システムで使用される非常によく似た文法です。SMAPI は、他の世界と同じように疑問符を使用して、前のものの 0 または 1 を意味します。JSGF はこれに角括弧を使用します。stuff?そのため、文字列を のように変換し[stuff]、かっこで囲まれた文字列を のよう((((stuff)? that)? I)? like)?に変換する必要があります[[[[stuff] that] I] like]。のような文字列をそのままにしておく必要があります((((stuff) that) I) hate)。Qtax が指摘したように、より複雑な例は(foo ((bar)? (baz))?)に置き換えられ(foo [[bar] (baz)])ます。
このため、括弧で囲まれた式のすべてのレベルを抽出し、それが疑問符で終わっているかどうかを確認し、そうであれば括弧と疑問符を角括弧に置き換える必要があります。この質問に対する Eric Strom の回答は、ほぼ私が必要としているものだと思います。問題は、それを使用すると、一致した最大のグループ化が返されるのに対し、個々のグループ化ごとに操作を行う必要があることです。
これは私がこれまでに持っているものです: s/( \( (?: [^()?]* | (?0) )* \) ) \?/[$1]/xg. ((((stuff)? that)? I)? like)?ただし、 と一致すると、 のみが生成され[((((stuff)? that)? I)? like)]ます。これを行う方法についてのアイデアはありますか?
私