正则表达式,无前导点,最大为前导零

tm1*_*m13 2 java regex android

如何编写与具有以下属性的字符串匹配的正则表达式?:

  1. 不仅包含数字,还包含作为小数点分隔符的点(但点号不是必需的,这意味着它可以是123123.4123.56)。
  2. 没有前导点(不是.12)。
  3. 前导零只有在其后跟一个点(不能与000.12,只能是0.12)一起写入。
  4. 哈只有2位小数。

And*_*eas 5

在小数点左边,您想要一个不以零开头的数字(1个或多个数字):

[1-9][0-9]*

或者可以是零:

0|[1-9][0-9]*

该值可以有一个小数点和小数点后的1-2位:

\.[0-9]{1,2}

需要左侧。小数点和小数位是可选的:

(?:0|[1-9][0-9]*)(?:\.[0-9]{1,2})?

需要第一个非捕获组来限制|模式的范围。需要第二个非捕获组,以使组合的“小数点和小数位数”模式为可选。

请注意,这将允许尾随零,例如 100.00


根据喜好,[0-9]也可以写成\d。我通常会使用\d,但是由于regex也有[1-9],我[0-9]在这里更喜欢,因为我觉得它有助于理清区别。

根据正则表达式的使用方式,您可能需要添加^开始/ $结束锚。使用时需要使用它们,使用时不需要使用它们find()matches()但不会造成伤害:

^(?:0|[1-9][0-9]*)(?:\.[0-9]{1,2})?$