【问题标题】:Strange regular expression behaviour for decimal numbers in javajava中十进制数的奇怪正则表达式行为
【发布时间】:2014-01-09 10:42:38
【问题描述】:

以下是我的java代码

Pattern p = Pattern.compile("-?\\d*\\.?\\d*");
Matcher m = p.matcher("the numbers are -3.4 and 132");
while (m.find()) {
    System.out.println(m.group());
}

但它无法匹配任何一个数字。任何人都可以对这个程序有所了解吗?

【问题讨论】:

    标签: java regex decimal


    【解决方案1】:

    您的正则表达式匹配数字,但也匹配每个字符间。例如,使用\\d+ 而不是第二个\\d*

    我通常使用以下正则表达式来匹配数字(Java 已经转义):

    [-+]?\\d*[.]?\\d+(?:[eE][-+]?\\d+)?

    【讨论】:

    • 这是一些奇怪的 java 特有的东西吗?我永远不会选择那个。
    • @VasiliSyrakis 不,只是每个使用的重复器(*?)都允许 0 次重复,即空字符串。
    • 哦,这很有帮助。现在我明白了。谢谢
    • @ImagineDragon 很高兴我能提供帮助;)如果我的回答符合您的需求,请不要忘记accept it
    【解决方案2】:

    使用这个正则表达式:

    -?\\d+(?:\\.\\d+)?
    

    【讨论】:

      猜你喜欢
      • 2012-03-02
      • 2018-06-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-17
      • 1970-01-01
      • 2013-07-13
      相关资源
      最近更新 更多