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

die*_*lar 11 java regex

我正在努力if (nuevo_precio.getText().matches("/^\\d+$/"))但到目前为止还没有取得好成绩......

nha*_*tdh 23

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

nuevo_precio.getText().matches("^\\d+$")
Run Code Online (Sandbox Code Playgroud)

由于String.matches()(或Matcher.matcher())迫使整个字符串来匹配模式返回true时,^$实际上是多余的,可以在不影响结果被删除.与JavaScript,PHP(PCRE)或Perl相比,这有点不同,其中"匹配"意味着在目标字符串中查找与模式匹配的子字符串.

nuevo_precio.getText().matches("\\d+") // Equivalent solution
Run Code Online (Sandbox Code Playgroud)

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


要限制正是 4位数字:

"\\d{4}"
Run Code Online (Sandbox Code Playgroud)


Non*_*eSL 14

正如其他人已经说过的那样,java不使用分隔符.你想要匹配的字符串不需要尾部斜杠,所以不/^\\d+$/应该是你的字符串^\\d+$.

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

^-?\d+$
Run Code Online (Sandbox Code Playgroud)

打破它:

^         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)
Run Code Online (Sandbox Code Playgroud)

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


:注意^$,如果你使用的是不需要(字符串的开始/结束)字符.matches():

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

- 取自这个答案

^$无论如何,正则表达式仍然适用.即使它是可选的,我仍然会将它包含在正则表达式的可读性中,就像在其他情况下默认情况下你不匹配整个字符串一样(大多数情况下如果你不使用的话.matches()),你会使用这些字符


相反的情况:

^\D+$
Run Code Online (Sandbox Code Playgroud)

\D是一切都不是数字.该\D(非数字),通过则无效\d(位).

regex101上的整数正则表达式


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

^-?\d+(\.\d+)?$
Run Code Online (Sandbox Code Playgroud)

打破它:

^         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())
Run Code Online (Sandbox Code Playgroud)

当然,在Java而不是\d\.你有双反斜杠,如上例所示.

regex101上的双重正则表达式


Boh*_*ian 8

Java不使用斜杠来分隔正则表达式.

.matches("\\d+")
Run Code Online (Sandbox Code Playgroud)

应该这样做.

FYI String.matches()方法必须匹配整个输入才能返回true.


即使在像perl这样的语言中,斜杠也不是正则表达式的一部分; 它们是分隔符 - 如果是应用程序代码,则与正则表达式无关