左括弧が作成されるこの式 (3+2)+23/12-(43/54) のような Java の正規表現は、ユーザーが右括弧を作成することができ、左括弧が作成されない場合ユーザーは右括弧を入れることができません。また、左括弧が 3 回作成された場合、ユーザーは右括弧を 3 回だけ挿入して、左括弧で開いている式を閉じることができます。
ありがとう
左括弧が作成されるこの式 (3+2)+23/12-(43/54) のような Java の正規表現は、ユーザーが右括弧を作成することができ、左括弧が作成されない場合ユーザーは右括弧を入れることができません。また、左括弧が 3 回作成された場合、ユーザーは右括弧を 3 回だけ挿入して、左括弧で開いている式を閉じることができます。
ありがとう
一言で言えば、これは標準の正規表現では不可能です。
正規表現は正規言語と呼ばれるものにのみ一致し、ネストされた構造に一致するには、より一般的な形式言語が必要です。
入れ子になったパターンの照合に正規表現を使用できますか? を参照してください。
ただし、他の手段を使用して必要なことを行うのは非常に簡単です。たとえば、+1
for'('
と-1
forの括弧を数えながら、文字列を 1 回繰り返し')'
ます。最後に、カウントは開き括弧の数を示します。カウントが 0 より大きい場合は、ユーザーが閉じ括弧を追加できるようにします。それ以外の場合は、しないでください。
最良の代替手段は、レクサーとパーサーを使用することです。Java の世界では、お気に入りは ANTLR と JavaCC です。
Backus-Naur Form [BNF] で電卓言語をモデル化することから始めます。次に、選択したレクサーに変換し、パーサーを使用して結果を処理します。
正規表現で表現できるものではありません。
これには文脈自由文法が必要です。
こちらもご覧ください:
http://en.wikipedia.org/wiki/Context-free_grammar
「整形式の括弧」セクションの下。