【问题标题】:regex pattern is matching with one of the pattern i cant able to follow?正则表达式模式与我无法遵循的模式之一匹配?
【发布时间】:2015-07-05 17:09:11
【问题描述】:

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

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。

我错过了什么??

【问题讨论】:

    标签: java regex match


    【解决方案1】:

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

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

    如果您想在小数点前允许一个或两个零。您当前的正则表达式仅捕获其中一部分的原因是,| 表示要么在 . 之前捕获一个零,要么捕获不以零开头的任意长度的数字(因为 [1-9] 类排除了它)。

    【讨论】:

      【解决方案2】:

      我认为在最后一秒的比赛中应该是 00.50。

      我错过了什么??

      不行,你这部分正则表达式(0|[1-9]\d*)\.可以改写为(0\.|[1-9]\d*\.),所以只能接受

      • 一个0.

      • [1-9]\d*.

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

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

      【讨论】:

        【解决方案3】:
        (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
        

        只进行适当的匹配。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2019-10-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多