只有整数字符串的 Java 正则表达式是什么?

2022-09-03 08:44:26

我正在尝试,但到目前为止没有得到好的结果...if (nuevo_precio.getText().matches("/^\\d+$/"))


答案 1

在 Java 正则表达式中,您不使用分隔符:/

nuevo_precio.getText().matches("^\\d+$")

由于(或)强制整个字符串与返回的模式匹配,因此和实际上是多余的,可以在不影响结果的情况下删除。这与JavaScript,PHP(PCRE)或Perl相比略有不同,其中“match”意味着在目标字符串中找到与模式匹配的子字符串。String.matches()Matcher.matcher()true^$

nuevo_precio.getText().matches("\\d+") // Equivalent solution

但是,将其留在那里并没有什么坏处,因为它表示意图并使正则表达式更具可移植性。


限制为 4 位数字:

"\\d{4}"

答案 2

正如其他人已经说过的那样,java不使用分隔符。您尝试匹配的字符串不需要尾部斜杠,因此您的字符串应该是 。/^\\d+$/^\\d+$

现在我知道这是一个老问题,但这里的大多数人都忘记了一些非常重要的事情。整数的正确正则表达式:

^-?\d+$

分解:

^         String start metacharacter (Not required if using matches() - read below)
 -?       Matches the minus character (Optional)
   \d+   Matches 1 or more digit characters
       $  String end metacharacter (Not required if using matches() - read below)

当然,在Java中,您需要双反斜杠而不是常规反斜杠,因此与上述正则表达式匹配的Java字符串是^-?\\d+$


注意:如果使用 :^$.matches()

欢迎来到Java的错误命名方法...它尝试并匹配所有输入。不幸的是,其他语言也纷纷效仿:(.matches()

- 取自这个答案

无论如何,正则表达式仍然可以与即使它是可选的,我仍然会包含它以获得正则表达式的可读性,就像在所有其他情况下,当你默认不匹配整个字符串时(如果你不使用,这是大多数时候),你会使用这些字符^$.matches()


要匹配相反的内容:

^\D+$

这是所有不是数字的东西。(非数字)否定(数字)。\D\D\d

正则表达式101 上的整数正则表达式


请注意,这仅适用于整数双打的正则表达式:

^-?\d+(\.\d+)?$

分解:

^         String start metacharacter (Not required if using matches())
 -?               Matches the minus character. The ? sign makes the minus character optional.
   \d+           Matches 1 or more digit characters
       (          Start capturing group
        \.\d+     A literal dot followed by one or more digits
             )?   End capturing group. The ? sign makes the whole group optional.
               $  String end metacharacter (Not required if using matches())

当然,在Java中,而不是像上面的例子那样,你会有双反斜杠。\d\.

正则表达式101 上的双精度正则表达式