正規表現が入力でゼロを受け入れるようにするにはどうすればよいですか?

正規表現が入力でゼロを受け入れるようにするにはどうすればよいですか?

0から999,999,999,999.99までの数字を受け入れる正規表現を書いています。カンマはオプションですが、999999999999.99 までの値は引き続き許可されます。一つを書いたところ、二つの欠陥がありました。

(^[1-9][0-9,]{0,14}(\.[0-9]{1,2})?$)
  1. 0を受け入れます。したがって、0、0.00は有効ですが、00または00.00は無効です。
  2. カンマなしで999,999,999,999.99を超える値は許可されません。

どうすればいいですか?私はそれをテストするためにregex101.com pcre(php)を使用しています。

ベストアンサー1

テストファイルの内容:

start cmd:> cat file
999,999,999,999.99
999999999999.99
9,999,999,999,999.99
9999999999999.99
0
0.00
00
00.00

grep -E '^(0|0\.[0-9]{1,2}|'\
'[1-9][0-9]{0,2}(,?[0-9][0-9][0-9]){0,3}(\.[0-9]{1,2})?|'\
'[1-9][0-9]{0,2}(,[0-9][0-9][0-9])*(\.[0-9]{1,2})?)$' file
999,999,999,999.99
999999999999.99
9,999,999,999,999.99
0
0.00

おすすめ記事