jsonのnumberの正規表現

練習がてら、普段の仕事では滅多に日の目を見ない正規表現に手を出してるんだけど、なかなかどうして。元ネタはコレ⇒http://d.hatena.ne.jp/brazil/20050915/1126709945のnumberの方。

Pattern pattern = Pattern.compile("\\Q-\\E?(0|[1-9]\\d*)(\\Q.\\E\\d*)?((e|E)(\\Q+\\E|\\Q-\\E)\\d*)?");

一応通ったっぽいけど、あやしい。でも、図と対応して表現できるっぽいところがとても面白い。
これをintとかdoubleとかBigDecimalとかのクラスで返す…ようにするのかな。何か小粋な返し方ってないもんだろか。

追記

間違い発見。

Pattern pattern = Pattern.compile("\\Q-\\E?(0|[1-9]\\d*)(\\Q.\\E\\d*)?((e|E)(\\Q+\\E|\\Q-\\E)?\\d*)?");

(e|E)(\\Q+\\E|\\Q-\\E)?。線が一本ありました。