Извлечь 4-значный номер из текста - PullRequest
4 голосов
/ 29 декабря 2010
    preg_match_all('/([\d]+)/', $text, $matches);

    foreach($matches as $match)
    {
        if(length($match) == 4){
            return $match;
        }
    }

я хочу использовать preg_match_all для извлечения только четырехзначного числа?

а если я хочу получить четырехзначное или двухзначное число? (второй случай)

Ответы [ 3 ]

12 голосов
/ 29 декабря 2010

Используйте

preg_match_all('/(\d{4})/', $text, $matches);
return $matches;

Нет необходимости использовать класс символов, если у вас есть только \d для соответствия, кстати (я опускаю квадратные скобки).

Если вы хотите сопоставить 4-значное или 2-значное число, используйте

preg_match_all('/(?<!\d)(\d{4}|\d{2})(?!\d)/', $text, $matches);
return $matches;

Здесь я использую отрицательный взгляд за (?<!\d) и отрицательный взгляд (?!\d), чтобы предотвратить сопоставление двухзначных частей трехзначных чисел (например, предотвратить сопоставление 123 как 12).

3 голосов
/ 29 декабря 2010

Для совпадения со всеми цифрами 4 вы можете использовать регулярное выражение \d{4}

preg_match_all('/\b(\d{4})\b/', $text, $matches);

Далее, чтобы сопоставить либо 2, либо 4 цифру, вы можете использовать регулярное выражение \d{2}|\d{4}или более короткое регулярное выражение \d{2}(\d{2})?

preg_match_all('/\b(\d{2}(\d{2})?)\b/', $text, $matches);

Посмотреть

1 голос
/ 29 декабря 2010

Укажите диапазон {4} как это:

preg_match_all('/(\d{4})/', $text, $matches);

Для двух цифр:

preg_match_all('/(\d{2})/', $text, $matches);
...