количество регулярных выражений в одном матче - PullRequest
0 голосов
/ 26 марта 2010

Я хочу проверить, не содержит ли строка более 5 чисел. Я могу сделать это так:

Matcher matcher = Pattern.compile("\\d").matcher(val);
i = 0;
while (matcher.find()) {
    i++;
}

Однако я хотел бы сделать это без времени (потому что мы используем структуру проверки регулярных выражений) Я хочу иметь возможность сопоставлять строки как

A2sad..3f,3,sdasad2..2

Ответы [ 3 ]

3 голосов
/ 26 марта 2010

Это регулярное выражение соответствует строкам, содержащим не более 5 цифр:

^(\D*\d){0,5}\D*$

И если вы хотите сопоставить строки, состоящие ровно из 5 цифр, выполните:

^(\D*\d){5}\D*$

Обратите внимание, что внутри литерала java.lang.String вам необходимо избежать обратной косой черты:

boolean match = "A2sad..3f,3,sdasad2..2".matches("(\\D*\\d){0,5}\\D*");

или

boolean match = "A2sad..3f,3,sdasad2..2".matches("(\\D*\\d){5}\\D*");

и вам не нужно добавлять «якоря» ^ и $, поскольку matches(...) в Java уже полностью соответствует строке.

2 голосов
/ 26 марта 2010

Попробуйте это регулярное выражение:

^\D*(?:\d\D*){0,5}$

\d - это одна цифра, а \D - это дополнение к ней, поэтому любой символ, кроме цифры. (?:…) походит на нормальную группировку за исключением того, что на ее подстать нельзя ссылаться.

Это регулярное выражение допускает любые нецифровые символы в начале, за которыми следует не более пяти последовательностей одной цифры, за которыми следуют необязательные нецифровые символы.

1 голос
/ 26 марта 2010

Один из способов - использовать отрицательный прогноз:

^(?!(?:\D*\d){6})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...