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

时间:2013-05-02 06:08:47

标签: java regex

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

6 个答案:

答案 0 :(得分:22)

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

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

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

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

将它留在那里并没有什么坏处,因为它表示意图并使正则表达式更便携。


限制为完全 4位数字:

"\\d{4}"

答案 1 :(得分:14)

正如其他人已经说过的,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()方法...它尝试并匹配所有输入。不幸的是,其他语言也纷纷效仿:(

     

- 取自this answer

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

与相反的情况相符:

^\D+$

\D是不是数字的一切。 \D(非数字)否定\d(数字)。

Integer regex on regex101

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

^-?\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\.中,你会有双反斜杠,如上例所示。

Doubles regex on regex101

答案 2 :(得分:8)

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

.matches("\\d+")

应该这样做。

仅供参考String.matches()方法必须与整个输入匹配才能返回true


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

答案 3 :(得分:2)

你也可以去否定来检查数字是否是纯数字。

Pattern pattern = Pattern.compile(".*[^0-9].*");
for(String input: inputs){
           System.out.println( "Is " + input + " a number : "
                                + !pattern.matcher(input).matches());
}

答案 4 :(得分:-1)

    public static void main(String[] args) {
    //regex is made to allow all the characters like a,b,...z,A,B,.....Z and 
    //also numbers from 0-9.
    String regex = "[a-zA-z0-9]*";

    String stringName="paul123";
    //pattern compiled   
    Pattern pattern = Pattern.compile(regex);

    String s = stringName.trim();

    Matcher matcher = pattern.matcher(s);

    System.out.println(matcher.matches());
    }

答案 5 :(得分:-1)

正则表达式仅适用于数字,而不适用于整数:

Integer.MAX_VALUE