Вы должны соответствовать материал по обе стороны от 8 цифр. Вы можете сделать это с нулевой шириной просмотровых вокруг утверждений, о чем свидетельствует @S Марк, или вы можете взять простой маршрут просто создание обратной ссылки для 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-Compatible синтаксиса регулярных выражений, см http://ca3.php.net/manual/en/reference.pcre.pattern.syntax.php
Вы можете уточнить, что '(? user198729
@ user198729, они выглядят позади и смотрят в будущее, '!' Означает нет, поэтому \ d не должен появляться до и после \ d {8}, для получения дополнительной информации см. Http: //www.regular-expressions .info/lookaround.html – YOU
Они упоминаются как «утверждения обхода с нулевой шириной». Существует целый класс атомов RE, которые начинаются с '(?'; Из них в этом примере следуют '!', Чтобы указать, что они соответствуют тому, что происходит, пока оно не соответствует тому, что после '!', или ' intuited