2016-05-18 25 views
1

Infixの式をPrefixとPostfix、Prefixの式をPostfixとInfix、Postfixの式をInfixとPrefixに変換するプログラムをC#で作成する必要があります。しかしこれは問題ではなく、プログラムの「処理部分」は既に行われています。Prefix、Infix、Postfixの式を有効にする正規表現

私が今必要とするのは、ユーザー入力がインフィックス、プレフィックス、またはポストフィックスの式であるかどうかを検証する正規表現です。したがって、入力に応じて、変換を実行する別の関数が呼び出されます。

入力は常に次のようになります。オペランドの場合
:オペレーターの方からZ
への資本単一の手紙:+、 - 、*および/

中置発現のために、私は思われ、この正規表現を(作っ
"^(([A-Z])(([+]|[-]|[*]|[/])([A-Z]))*)$"

しかし、私はPrefixとPostfixの式の正規表現を作成しようと考えていました。私はインターネット上で何も見つけませんでした。

誰かが私に光を与えることができますか?

+0

私が正しく理解している場合、どのパターンが使用されているかを知るためにのみパターンを使用しますが、キャプチャグループ内の表現の一部をキャプチャする必要はありませんか?また、あなたのパターンは空白を許さないことを意図していますか?接頭辞表記は '+ AB'または' + A B'のようになっていますか? @Rawingこんにちは、 –

+0

はい、どの表記が使用されているかを調べるだけです。そしてそれは空白を持つべきではないので、私は+ A Bの代わりに '+ AB'を考えています。 –

答えて

0

再帰正規表現(C#ではサポートされていません)がなければ、残念ながらこれはできません。中位の表記法は単純正規表現[A-Z](?:[*/+-][A-Z])*とマッチさせることができますが、プリフィックスとポストフィックスの表記法は、非再帰的な正規表現とマッチするような単純なパターンに従いません。

言い換えれば、式がプリフィックス/ポストフィックス記法を使用しているかどうかを判断する非常に簡単な方法は、最初/最後の文字が演算子かどうかをチェックすることです:^[*/+-]は、よく形成された後置式である。

+0

ねえ、あなたは再帰的な正規表現をどのように使うのでしょうか? –

+0

@MatheusSousa :(? [AZ])?? [?\/+](?&expr)(?&expr)(?(?&number)|(& op)| \ (?&expr)(?&expr)(?&expr)(?&expr)(?&expr) '?(DEFINE) ?(?&number)|(?&op)| \((&expr)\)))(?&expr) 'の後ろに。 (どちらのパターンも括弧を許していますが、それを望まないなら '| \((&expr)\)'部分を削除してください。 –

関連する問題