Извлечение 5 или 6 цифр из строки

Я пытаюсь извлечь 5 или 6 цифр только из строки. Ниже приведен код, который я пробовал, но это не так, как ожидалось.

$str1 = "21-114512"; //it should return 114512
$str2 = "test12345abcd"; //it should return 12345
$str3 = "12test123456testing"; //it should return 123456

function extract_numbers($string)
{
preg_match_all('/\b[^\d]*\d{6}[^\d]*\b/', $string, $match);

return $match[0];
}

print_r(extract_numbers($str1));

1

Решение

Lookarounds и дальний квантификатор должны сделать свое дело.

Логика шаблона гласит: найдите последовательность из 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',
)
---
3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]