Регулярное выражение: сопоставление триплета числа в заданном целом числе

#java #regex #integer #pattern-matching #extract

#java #регулярное выражение #целое число #сопоставление с образцом #извлечь

Вопрос:

Итак, я довольно новичок в регулярном выражении … до сих пор я использую регулярное выражение цикл :

 boolean match = false; int number =0;

int number =0;

String Str1 = String.valueOf(451999277);

 for (int i=0;match1 == false;i  ) {
        //check the pattern through loop
            match1 = Pattern.matches(".*"   i   i   i   ".*", Str1);
            number = i;// assigning the number (i) which is the triplet(occur 3 times in a row) in the givin int

    }
  

Моя цель — найти число, которое является триплетом в заданном целом числе, например:

Я хочу извлечь: «9» из 451999277; поскольку «9» встречается 3 раза, т.е. «999»

но я уверен, что должно быть решение, использующее исключительно регулярное выражение….Было бы здорово, если бы кто-нибудь помог мне найти это решение …… заранее спасибо

Ответ №1:

Используйте группу захвата для сопоставления с цифрой, а затем обратитесь к ней позже:

 (d)11
  

сопоставит цифру, запишите ее в группу (в данном случае номер 1, поскольку это первая группа регулярного выражения), а затем сопоставьте все, что находится в группе 1, дважды сразу после этого.

 Pattern regex = Pattern.compile("(\d)\1\1");
Matcher regexMatcher = regex.matcher(subject);
if (regexMatcher.find()) {
    ResultString = regexMatcher.group();
} 
  

найдет первое совпадение в subject (если оно есть).

Комментарии:

1. О, это сработало! большое вам спасибо, сэр ….. можете ли вы подсказать мне лучшие ресурсы для изучения регулярных выражений на Java?

2. Перейдите по ссылке в моем ответе на отличный общий сайт регулярных выражений. Он также содержит информацию о специфичных для Java проблемах с регулярными выражениями.