Подтвердить что ты не робот

Regex для проверки, заканчивается ли строка числом

Я хотел бы проверить, заканчивается ли строка цифрой. Я ожидаю, что следующая строка Java вернет true. Почему он печатает false?

System.out.println("I end with a number 4".matches("\\d$"));
4b9b3361

Ответ 1

Ваше регулярное выражение не будет соответствовать всей строке, а только последней части. Попробуйте приведенный ниже код, и он должен работать нормально, поскольку он соответствует всей строке.

System.out.println("I end with a number 4".matches("^.+?\\d$"));

Вы можете проверить это для быстрой проверки онлайн-тестировщиков регулярных выражений, таких как: http://www.regexplanet.com/simple/index.html. Это также дает вам то, что вы должны использовать в Java-коде в результатах с соответствующими экранами.

. + гарантирует, что перед цифрой будет по крайней мере один символ. ? обеспечит ленивое совпадение вместо жадного соответствия.

Ответ 2

В Java Regex существует разница между Matcher.find() (найти совпадение в любом месте строки) и Matcher.matches() (соответствует всей строке).

У String только есть метод matches() (реализованный эквивалент этого кода: Pattern.compile(pattern).matcher(this).matches();), поэтому вам нужно создать шаблон, который соответствует полной строке:

System.out.println("I end with a number 4".matches("^.*\\d$"));

Ответ 3

Ваше выражение RegEx слегка отключено. Попробуйте следующее:

System.out.println("I end with a number 4".matches("^.*\\d$"));

Вы также можете просто протестировать это, если вы оцениваете строку за раз:

System.out.println("I end with a number 4".matches(".*\\d"));

Ваше исходное выражение, без. * проверено только, была ли строка номером и не учитывала текст, который может предшествовать этому номеру. Вот почему это всегда было ложным.

Ниже показано значение true:

System.out.println("4".matches("^\\d$"));

Ответ 4

System.out.println("I end with a number 4".matches(".*\\d")); // prints true

или

String s = "I end with a number 4";
System.out.println(Character.isDigit(s.charAt(s.length()-1)));  // prints true

Ответ 5

попробуйте следующее:

System.out.println("I end with a number 4".matches(".*\\d\$"));