检查字符串是否仅包含特定数字(例如“ 111”)

Rna*_*nam 5 java regex string

需要找出给定的字符串是否仅仅包含特定数字-例如,“ 111”,“ 2”,“ 33”应返回true。

“ 12”应返回false。

空字符串(“”)也应返回true。

该字符串仅包含数字,没有其他字符。

编写了一个看起来有效的丑陋的Java正则表达式,但不禁认为应该以更短的方式编写它:

str.matches("1*|2*|3*|4*|5*|6*|7*|8*|9*|0*")
Run Code Online (Sandbox Code Playgroud)

有没有一种更简单,更优雅的方法来进行上述操作,而又避免了所有数字一一列出?

Pus*_*shi 9

您可以使用此正则表达式,该正则表达式使用group捕获第一个数字,然后使用向后引用以确保后面的数字都相同,

^(\d)?\1*$
Run Code Online (Sandbox Code Playgroud)

说明:

  • ^ -字符串开始
  • (\d)?-匹配一个数字并捕获到group1中,并?使其成为可选以允许匹配空字符串。
  • \1* -匹配相同的数字零次或多次
  • $ -字符串结尾

正则表达式演示

Java代码

List<String> list = Arrays.asList("5","5555","11111","22222","1234", "");
list.forEach(x -> {
    System.out.println(x + " --> " + x.matches("(\\d)?\\1*"));
});
Run Code Online (Sandbox Code Playgroud)

印刷品

5 --> true
5555 --> true
11111 --> true
22222 --> true
1234 --> false
 --> true
Run Code Online (Sandbox Code Playgroud)