私は lex で電卓を書いていますが、double を認識するための正規表現が必要です。それはどのように書かれるべきですか?のようなものになるはずですが[[0 + [0-9][0-9]*].[0-9]+] + [1-9][0-9]*
、lex で動作させることはできません。
サンプル入力は double または integer です (double に変換されます)
私は lex で電卓を書いていますが、double を認識するための正規表現が必要です。それはどのように書かれるべきですか?のようなものになるはずですが[[0 + [0-9][0-9]*].[0-9]+] + [1-9][0-9]*
、lex で動作させることはできません。
サンプル入力は double または integer です (double に変換されます)
いくつかの問題があります。
正規表現ではスペースが重要です: スペースを削除してください。
角括弧 ( []
) は、グループ化ではなく、文字クラスを示します。グループ化には括弧を使用します。
ピリオド文字 ( .
) は何にでも一致します。あなたの意図はピリオド文字 (小数点) のみに一致することだと思うので、バックスラッシュでエスケープする必要があります。
したがって、正規表現を次のように変更します
((0+[0-9][0-9]*)\.[0-9]+)+[1-9][0-9]*
その時点からデバッグします。
+
また、1回以上の繰り返しを意味するプラス記号 ( ) と、どちらか一方を意味するパイプ記号 ( ) の違いを理解しているかどうかもわかりません|
。