/ /正規表現を数字をキャプチャする - 正規表現

数をキャプチャする正規表現 - 正規表現

私は次の正規表現を持っている (?x:-?(?:0|[1-9]d*)(?:.d+)?(?:[eE][+-]?d+)?) すべての番号で機能する

first -1.3 second 1.1e-2 third -1e-2 fourth -10 fith  -0.1 sixth .3 done.

しかし最後のもの .3.

私は最初のグループを作ろうとしていた (?:0|[1-9]\d*) オプションですが、それは正規表現を壊します。どのように正規表現をすべてのケースで動作させることができますか?

回答:

回答№1は1

最初のものが最初に。きみの 正規表現 次のとおりです。

-?(?:0|[1-9]d*)(?:.d+)?(?:[eE][+-]?d+)?

あなたは (?x:...) あなたの正規表現には空白がないので、正規表現を文字列リテラルの形で書くときは、バックスラッシュをエスケープするだけです。ほとんどのレスポンダーはあなたが何を意味しているかを知っていることがありますが、時には文字通りバックスラッシュにマッチさせようとしている人もいます。

今、あなたがする必要があるのは、正規表現全体に別の代替手段を加えることです:

-?(?:(?:0|[1-9]d*)(?:.d+)?(?:[eE][+-]?d+)?|.d+)

すべてのケースで指数部を許可する場合は、次のようにします。

-?(?:(?:0|[1-9]d*)(?:.d+)?|.d+)(?:[eE][+-]?d+)?

誰もが最初にこの問題に遭遇したときに、よりエレガントで賢い方法があると予想していますが、それはありません。