Мне нужна помощь в применении ограничения для регулярного выражения на PHP - PullRequest
1 голос
/ 20 апреля 2011

Я пытаюсь найти номер, который состоит только из 8 цифр, этот код у меня уже есть:

preg_match_all("/([0-9]{8})/", $string, $match)

но это вытягивает 8 чисел из числовых строк, которые длиннее 8 цифр

любая помощь будет с благодарностью

Спасибо

Ответы [ 5 ]

5 голосов
/ 20 апреля 2011

Я буду использовать \d вместо [0-9].

Если ваша строка не должна содержать ничего, кроме числа из восьми цифр

Использовать ^и $ для сопоставления начала и конца строки соответственно:

preg_match_all('/^(\d{8})$/', $string, $match)

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

Быстрый, но слегка грубоватый подход:

Используйте \D ([^0-9]), чтобы сопоставить "не число":

preg_match_all('/^|\D(\d{8})\D|$/', $string, $match)

Взгляд/ lookaheads может сделать это лучше:

preg_match_all('/(?<!\d)(\d{8})(?!\d)/', $string, $match)
4 голосов
/ 20 апреля 2011

Вам нужны границы слов

/\b[0-9]{8}\b/

Пример:

$string = '34523452345 2352345234 13452345 45357567567567 24573257 35672456';
preg_match_all("/\b[0-9]{8}\b/", $string, $match);
print_r($match);

Вывод:

Array
(
    [0] => Array
        (
            [0] => 13452345
            [1] => 24573257
            [2] => 35672456
        )

)
1 голос
/ 20 апреля 2011

Это может быть лучше, чем два других предложения:

preg_match_all('/(?<!\d)(\d{8})(?!\d)/', $string, $match)

Обратите внимание, что \d эквивалентно [0-9].

0 голосов
/ 20 апреля 2011
preg_match_all("/(?:^|\D)(\d{8})(?:\D|$)/", $string, $match);

Где начальная и конечная несоответствующие группы (? :) допускают любые нецифровые (\ D) или начальные (^) или конечные ($) строки.

0 голосов
/ 20 апреля 2011

Может включать что угодно, кроме цифр до и после.

preg_match_all("/[^\d]([\d]{8})[^\d]/", $string, $match)
...