Вы должны соответствовать материалу по обе стороны от 8 цифр. Вы можете сделать это с помощью проверочных утверждений нулевой ширины, как показано на примере @S Mark, или вы можете выбрать более простой путь - просто создать обратную ссылку для 8 цифр:
preg_match('/\D(\d{8})\D/', $string, $matches)
$eight_digits = $matches[1];
Но это не будет совпадать, когда цифры начинают или заканчивают строку или строку; для этого нужно немного уточнить это:
preg_match('/(?:\D|^)(\d{8})(?:\D|$)/', $string, $matches)
$eight_digits = $matches[1];
(?:...)
в этом позволяет вам указать подмножество альтернатив, используя |
, не считая совпадение как обратную ссылку (т.е. добавляя его к элементам в массиве $matches
).
Для получения более подробной информации о богатом и тонком языке, который является Perl-совместимым синтаксисом регулярных выражений, см. http://ca3.php.net/manual/en/reference.pcre.pattern.syntax.php