Java 正则表达式匹配数字模式

Posted

技术标签:

【中文标题】Java 正则表达式匹配数字模式【英文标题】:Java regex match number pattern 【发布时间】:2016-04-04 09:59:31 【问题描述】:

我想检查我的号码是否与正则表达式匹配。

我想要实现的是检查一个数字是否与模式匹配,而不是执行代码。

我的 if 语句如下:

public String refactorNumber(String input)
    if(input.matches("#,##0.##")) 
       //execute code
    

但它永远不会匹配,我输入的数字是:

 - 0
 - 100
 - 1,100.01

我做错了什么?

【问题讨论】:

# 是干什么用的? 这不是正则表达式。 # = 数字但不是强制性的 老实说,我认为您应该阅读 String.matches() 的文档 # = number 但不是强制性的 -> matches() 应该如何理解*你自己的语法 【参考方案1】:

恐怕你还没有正确理解正则表达式的语法。

从您的示例代码看来,您正在尝试匹配一个数字,后跟一个逗号,后跟两位数,然后是零,后跟一个小数点,然后是两位数。

为此,您的正则表达式模式需要:

\d,\d20\.\d2

找出模式的一个很好的资源是这个正则表达式备忘单:

https://www.cheatography.com/davechild/cheat-sheets/regular-expressions/

很遗憾,该网站现在出现问题,因此您可以使用此 google 搜索找到它:

https://www.google.co.uk/search?q=regex+cheat+sheet&tbm=isch

【讨论】:

【参考方案2】:

你可以这样做(如果我做错了,请纠正我):

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public static void main(String[] args) 

    String input =" - 0\n"+
      " - 100\n"+
      " - 1,100.01\n"+
      " - 100,100,3\n"+
      " - 100,100,3.15\n"+
      "";  
    refactorNumber(input);  


public static void refactorNumber(String input)
    Matcher m = Pattern.compile("((?:\\d,)?\\d0,20(?:\\.\\d1,2)?)(?!\\d*,)").matcher(input);
    while (m.find()) 
        //execute code
    

【讨论】:

【参考方案3】:

这是我喜欢用来仅检测数字的简单代码行。

if (input.matches("[0-9]*") 
//code here

【讨论】:

以上是关于Java 正则表达式匹配数字模式的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式与特定模式完全匹配 10 位数字

java 正则表达式 如何匹配固定长度的数字

在 Java 正则表达式中匹配 y 个组中的 x 个

java正则表达式能不能不按顺序匹配?

Java String正则匹配大小写问题

js正则匹配总结