preg_match строка с повторяющимися данными в ней - PullRequest
1 голос
/ 29 июля 2011

Например, у меня есть следующая строка:

2556974513|0123254852|1025635214|1236521025|0124576832

в строке должно быть 10 цифр, затем |, и эта формула может повторяться n раз, как ей соответствовать?

может быть, есть более простой способ сделать это, чем этот:

preg_match('/^[\d]{10}|[\d]{10}| ... [\d]{10}$/', $string);

Спасибо.

Ответы [ 2 ]

3 голосов
/ 29 июля 2011

Вы захотите что-то вроде этого:

^(?:\d{10}\|)+\d{10}$

В конце есть \d{10}, поскольку в конце нет символа |. + будет соответствовать одному или нескольким из предыдущего шаблона. Если допустимо совпадать только с одной группой из 10 цифр, замените + на *, что будет соответствовать нулю или более раз.

Обратите внимание, что символ | необходимо экранировать, поскольку он используется в качестве оператора OR в регулярном выражении.

1 голос
/ 29 июля 2011

Это означает «одна или несколько из (10 цифр, а затем труба)»:

(\d{10}\|)+

Редактировать: Из вашего вопроса не ясно, будет ли там хвостохранилище или нет.Если нет, то:

(\d{10}\|)*(\d{10})

Также, если вам все равно нужно извлечь значения, вы можете просто сделать:

foreach (explode('|', $string) as $value) {
    if (preg_match('/^\d{10}$/', $value)) {
        ...
    }
}
...