尝试
String regex = "[0-9]+";
或者
String regex = "\\d+";
根据 Java正则表达式, +
意思是“一次或多次”,\d
意思是“一个数字”。
注意:“双反斜杠”是获得单个反斜杠的转义序列\\d
- 因此,在 java String 中为您提供实际结果:\d
参考:
编辑:由于其他答案有些混乱,我正在编写一个测试用例,并将详细解释更多内容。
首先,如果您对此解决方案(或其他解决方案)的正确性有疑问,请运行此测试用例:
String regex = "\\d+";
// positive test cases, should all be "true"
System.out.println("1".matches(regex));
System.out.println("12345".matches(regex));
System.out.println("123456789".matches(regex));
// negative test cases, should all be "false"
System.out.println("".matches(regex));
System.out.println("foo".matches(regex));
System.out.println("aa123bb".matches(regex));
问题一:
是不是有必要添加^
和$
到正则表达式,所以它不会匹配 "aa123bb" ?
不。在java中,matches
方法(在问题中指定)匹配一个完整的字符串,而不是片段。换句话说,没有必要使用^\\d+$
(即使它也是正确的)。请参阅最后一个否定测试用例。
请注意,如果您使用在线“正则表达式检查器”,则其行为可能会有所不同。要在 Java 中匹配字符串的片段,您可以改用该find
方法,此处详细描述:
Java Regex中matches()和find()的区别
问题2:
这个正则表达式不会也匹配空字符串""
吗?*
不会。正则表达式\\d*
会匹配空字符串,但\\d+
不会。星*
号表示零或多个,而加号+
表示一或多个。请参阅第一个否定测试用例。
问题 3
编译正则表达式模式不是更快吗?
是的。编译一次正则表达式模式确实更快,而不是每次调用matches
,因此如果性能影响很重要,那么 aPattern
可以像这样编译和使用:
Pattern pattern = Pattern.compile(regex);
System.out.println(pattern.matcher("1").matches());
System.out.println(pattern.matcher("12345").matches());
System.out.println(pattern.matcher("123456789").matches());