Извлечение 5 или 6 цифр из строки - PullRequest
0 голосов
/ 11 февраля 2019

Я пытаюсь извлечь 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 Ответ

0 голосов
/ 11 февраля 2019

Внешний вид и дальний квантификатор должны помочь.

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