正则表达式模式是否与我能够遵循的模式之一相匹配?

时间:2015-07-05 17:09:12

标签: java regex match

我刚遇到一个正则表达式模式及其匹配的模式字符串,但我对其中一个匹配的模式感到困惑

Target: .50 1.50 0.50 10.50 00.50 1.555

Pattern: (0|[1-9]\d*)\.\d\d

Matches with: (4,7:1.50)(9,12:0.50)(14,18:10.50)(21,24:0.50)(26,29:1.55)

我从模式中推断出的是十进制后的两位数,在十进制之前是一个第一个数字为0或1到9之间的任何数字的组,后跟空字符串或任何数字字符串......

  

我认为在最后一场比赛中它应该是00.50。

我错过了什么?

3 个答案:

答案 0 :(得分:2)

只需将正则表达式模式更改为

即可
(00?|[1-9]\d*)\.\d\d

如果要在小数点前允许一个或两个零。你当前正则表达式只捕获其中一部分的原因是因为|表示在.之前捕获一个零或捕获任何不以零开头的长度(因为类{ {1}}排除它。)

答案 1 :(得分:1)

(0|[1-9]\d*)\.\d\d

^^

你的模式是匹配0 or any digit from 1 to 9 and then as many。所以结果是正确的,因为你没有提供锚点或单词边界来禁止部分匹配。使用

\b(0|[1-9]\d*)\.\d\d\b

只做适当的比赛。

答案 2 :(得分:1)

  

我认为在最后一场比赛中它应该是00.50。

     

我错过了什么?

不,您的正则表达式(0|[1-9]\d*)\.的这一部分可以重写为(0\.|[1-9]\d*\.),因此它只能接受

  • 一个0.

OR

  • [1-9]\d*.

如果您希望在使用点之前允许它使用多个零

(0+|[1-9]\d*)\.\d\d
  ^--one or more zeroes