回答編集履歴

1

質問者コメントに対して

2018/01/16 03:43

投稿

KojiDoi
KojiDoi

スコア13671

test CHANGED
@@ -29,3 +29,17 @@
29
29
 
30
30
 
31
31
  なお+記号ですが、[]の中に置いた場合は通常の文字として扱われます。
32
+
33
+
34
+
35
+ 質問者コメントを見て追記:
36
+
37
+ 「数字の前の+記号は一文字のみ認める」なら、提示した正規表現の[+]*は[+]?にしてください。
38
+
39
+
40
+
41
+ さて、「一般的な処理」かどうかは知りませんが、「間違いなく余計なもの」・「疑いようもなく間違っているもの」は最初に排除しておくほうが何かと楽です。まず「エラー」として突っ返す条件を確定し、これに合わないものはまず弾き、そして受け付けるものについては受け付けた後で余計な文字(カンマ)を削除する作戦がもっともすっきりしていると判断しました。必要なら、部分文字列\1でreplaceすることで、空白を削除した値の出力もこの段階で可能です。私が認識できた範囲ではこれで問題は出ないと考えましたが、なにかうまくいかない部分があるなら補足説明お願いします。
42
+
43
+
44
+
45
+ 実はjavaは知らないので正規表現の妥当性のみをみて考察しています。「第1のソース」では(\D)*という正規表現で数字でない文字の有無を判断しようとしているようですが、*は「0個以上」の繰り返しですから、**存在しないものでもマッチ**します。javaの正規表現に他の言語で使われているのとは異なる特殊な拡張が施されているのでない限り、これでは用をなさないはずです。仮に「数字以上の文字が含まれる」を正規表現で表すなら\Dだけで充分です。