0

私は lex で電卓を書いて​​いますが、double を認識するための正規表現が必要です。それはどのように書かれるべきですか?のようなものになるはずですが[[0 + [0-9][0-9]*].[0-9]+] + [1-9][0-9]*、lex で動作させることはできません。

サンプル入力は double または integer です (double に変換されます)

4

1 に答える 1

2

いくつかの問題があります。

  1. 正規表現ではスペースが重要です: スペースを削除してください。

  2. 角括弧 ( []) は、グループ化ではなく、文字クラスを示します。グループ化には括弧を使用します。

  3. ピリオド文字 ( .) は何にでも一致します。あなたの意図はピリオド文字 (小数点) のみに一致することだと思うので、バックスラッシュでエスケープする必要があります。

したがって、正規表現を次のように変更します

((0+[0-9][0-9]*)\.[0-9]+)+[1-9][0-9]*

その時点からデバッグします。

+また、1回以上の繰り返しを意味するプラス記号 ( ) と、どちらか一方を意味するパイプ記号 ( ) の違いを理解しているかどうかもわかりません|

于 2013-10-09T16:00:11.073 に答える