Внешний вид и дальний квантификатор должны помочь.
Логика шаблона говорит, что нужно найти последовательность из 5 или 6 цифр, а затем посмотреть до и после совпадающих цифр, чтобы убедиться, что ни одна из цифр отсутствуетсторона.
Код ( Демо )
$strings = [
"21-114512",
"test12345abcd",
"12test123456testing",
"123456",
"1234",
"12345a67890"
];
function extract_numbers($string)
{
return preg_match_all('/(?<!\d)\d{5,6}(?!\d)/', $string, $match) ? $match[0] : [];
}
foreach ($strings as $string) {
var_export(extract_numbers($string));
echo "\n---\n";
}
Выход:
array (
0 => '114512',
)
---
array (
0 => '12345',
)
---
array (
0 => '123456',
)
---
array (
0 => '123456',
)
---
array (
)
---
array (
0 => '12345',
1 => '67890',
)
---