Regex для проверки, заканчивается ли строка числом - PullRequest
13 голосов
/ 07 октября 2011

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

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

Ответы [ 5 ]

15 голосов
/ 07 октября 2011

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

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

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

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

9 голосов
/ 07 октября 2011

В 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 голосов
/ 07 октября 2011

Ваше выражение RegEx немного не в порядке .Попробуйте это:

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

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

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

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

Следующее действительно оценивает как истинное:

System.out.println("4".matches("^\\d$"));
1 голос
/ 07 октября 2011
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
0 голосов
/ 07 октября 2011

попробуйте это:

System.out.println("I end with a number 4".matches(".*\\d\$"));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...