1

左括弧が作成されるこの式 (3+2)+23/12-(43/54) のような Java の正規表現は、ユーザーが右括弧を作成することができ、左括弧が作成されない場合ユーザーは右括弧を入れることができません。また、左括弧が 3 回作成された場合、ユーザーは右括弧を 3 回だけ挿入して、左括弧で開いている式を閉じることができます。

ありがとう

4

3 に答える 3

4

一言で言えば、これは標準の正規表現では不可能です。

正規表現は正規言語と呼ばれるものにのみ一致し、ネストされた構造に一致するには、より一般的形式言語が必要です。

入れ子になったパターンの照合に正規表現を使用できますか? を参照してください。

ただし、他の手段を使用して必要なことを行うのは非常に簡単です。たとえば、+1for'('-1forの括弧を数えながら、文字列を 1 回繰り返し')'ます。最後に、カウントは開き括弧の数を示します。カウントが 0 より大きい場合は、ユーザーが閉じ括弧を追加できるようにします。それ以外の場合は、しないでください。

于 2013-03-24T11:19:42.870 に答える
1

最良の代替手段は、レクサーとパーサーを使用することです。Java の世界では、お気に入りは ANTLR と JavaCC です。

Backus-Naur Form [BNF] で電卓言語をモデル化することから始めます。次に、選択したレクサーに変換し、パーサーを使用して結果を処理します。

于 2013-03-24T11:34:48.117 に答える
1

正規表現で表現できるものではありません。

これには文脈自由文法が必要です。

こちらもご覧ください:

http://en.wikipedia.org/wiki/Context-free_grammar

「整形式の括弧」セクションの下。

于 2013-03-24T11:22:23.030 に答える