Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Java Новый топик    Ответить
 Pattern: найти число, состоящее из 4 цифр  [new]
Molasar
Member

Откуда:
Сообщений: 773
Всем привет!

Есть строка:
"Для подтверждения транзакции 12345678 вводите код 1111"

Какой должен быть Pattern, чтобы было найдено только одно число, состоящее из 4 цифр? Т.е. 1111
Причем комбинации из числа 12345678 должны быть исключены, т.к. оно состоит из более чем 4 цифр.
20 мар 19, 11:53    [21838263]     Ответить | Цитировать Сообщить модератору
 Re: Pattern: найти число, состоящее из 4 цифр  [new]
Partisan M
Member

Откуда:
Сообщений: 1379
"\\d{4}"
20 мар 19, 13:53    [21838483]     Ответить | Цитировать Сообщить модератору
 Re: Pattern: найти число, состоящее из 4 цифр  [new]
Partisan M
Member

Откуда:
Сообщений: 1379
Хотя не совсем. Правильно

"\\D*\\d{4}\\D*"

Если в строке есть не цифры в начале и/или в конце, то они тоже попадут в результат. Если не нужны, потом отсеять с помощью метода в классе String: replaceAll ("\\D", "")
20 мар 19, 14:00    [21838496]     Ответить | Цитировать Сообщить модератору
 Re: Pattern: найти число, состоящее из 4 цифр  [new]
Molasar
Member

Откуда:
Сообщений: 773
Partisan M
Хотя не совсем. Правильно

"\\D*\\d{4}\\D*"

Если в строке есть не цифры в начале и/или в конце, то они тоже попадут в результат. Если не нужны, потом отсеять с помощью метода в классе String: replaceAll ("\\D", "")

Ваш пример для строки "Dlya podtverzhdeniya tranzaktsii 12345678 vvedite odnorazovyy parol 7766" выдаёт 3 результата:
Dlya podtverzhdeniya tranzaktsii 1234
5678 vvedite odnorazovyy parol 
7766

А нужен один - 7766
20 мар 19, 14:27    [21838521]     Ответить | Цитировать Сообщить модератору
 Re: Pattern: найти число, состоящее из 4 цифр  [new]
Андрей Панфилов
Member

Откуда: Москва > Melbourne
Сообщений: 3355
Molasar,

https://regex101.com/r/NL0KkC/1
20 мар 19, 14:45    [21838554]     Ответить | Цитировать Сообщить модератору
 Re: Pattern: найти число, состоящее из 4 цифр  [new]
Пылинка
Member

Откуда: СПб
Сообщений: 361
Molasar
А нужен один - 7766

Выпиши ему штраф. Ну или просто поставь "двойку"
20 мар 19, 14:48    [21838559]     Ответить | Цитировать Сообщить модератору
 Re: Pattern: найти число, состоящее из 4 цифр  [new]
Partisan M
Member

Откуда:
Сообщений: 1379
Molasar,

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

"(\\d{4})$"

Сам проверил, что работает.
20 мар 19, 15:52    [21838647]     Ответить | Цитировать Сообщить модератору
 Re: Pattern: найти число, состоящее из 4 цифр  [new]
Partisan M
Member

Откуда:
Сообщений: 1379
Опять ошибка. В этих регулярных выражениях вообще легко ошибиться, что они будут делать не то, что надо.
Ну вот правильный пример. В нём group (0) и group (2) содержат одно и то же значение "1234", что и должно быть.

package org.sukhoi.oor.test;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegExTest {

    public static void main(String[] args) {
	String[] tests = {"1234", "Для неподтверждения транзакции 5678 не вводите код 1234" };
	String patternExpression = "(\\D*?)(\\d{4,4})$";

	Pattern p = Pattern.compile(patternExpression);

	for (String s : tests) {
	    System.out.println (s);
	    Matcher m = p.matcher(s);

	    System.out.println("групп:" + m.groupCount());
	    if (m.find()) {
		System.out.println("есть соответствие");
		for (int i = 0; i <= m.groupCount(); i++)
		    System.out.println( i + " найдено:\"" + m.group(i) +"\"");
		
	    }	
	    else
		System.out.println("нет соответствия");
	}
    }
}
21 мар 19, 09:39    [21839168]     Ответить | Цитировать Сообщить модератору
 Re: Pattern: найти число, состоящее из 4 цифр  [new]
mayton
Member

Откуда: loopback
Сообщений: 42959
Да тут просто с конца строки цифирки ищут. Зачем регулярка?
21 мар 19, 12:29    [21839432]     Ответить | Цитировать Сообщить модератору
Все форумы / Java Ответить