Что такое регулярное выражение Java для целых чисел с целыми числами?

Я пытаюсь с if (nuevo_precio.getText().matches("/^\\d+$/")), но пока не получил хороших результатов...

Ответ 1

В Java regex вы не используете разделители /:

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

Так как String.matches() (или Matcher.matcher()) вынуждает всю строку соответствовать шаблону для возврата true, ^ и $ на самом деле избыточны и могут быть удалены без влияния на результат. Это немного отличается от JavaScript, PHP (PCRE) или Perl, где "match" означает поиск подстроки в целевой строке, которая соответствует шаблону.

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()... Он пытается и соответствует ВСЕМ входным данным. К сожалению, другие языки последовали примеру :(

- взято из этого ответа

В любом случае регулярное выражение будет работать с ^$. Несмотря на то, что это необязательно, я по-прежнему включаю его для удобства чтения регулярных выражений, как и в любом другом случае, когда вы не соответствуете всей строке по умолчанию (что чаще всего происходит, если вы не используете .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

Ответ 3

Java не использует слэши для разграничения регулярных выражений.

.matches("\\d+")

Должно это сделать.

FYI метод String.matches() должен соответствовать всему вводу для возврата true.


Даже в таких языках, как perl, косые черты не являются частью регулярного выражения; они являются разделителями - часть, если код приложения, не имеет никакого отношения к регулярному выражению

Ответ 4

Вы также можете обратиться за отрицанием, чтобы проверить, является ли число чистым числом или нет.

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

Ответ 5

Regex работает только для чисел, а не целых чисел:

Integer.MAX_VALUE

Ответ 6

    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());
    }