Код: Выделить всё
$test = '123_123_Foo'
Код: Выделить всё
$test2 = '123_1256_Foo';
preg_match_all('/[0-9]{1,}/', $test2, $matches);
print_r($matches[0]); // Result: 'Array ( [0] => 123 [1] => 1256 )'
Код: Выделить всё
$test = preg_replace('/[^0-9_]/', '', $test);
$output = array_filter(explode('_', $test));
print_r($output); // Results: 'Array ( [0] => 123 [1] => 1256 )'
Код: Выделить всё
$test2 = '123_123_234_Foo2'
Поэтому я написал еще одно регулярное выражение, чтобы избавиться от смешанных строк:
Код: Выделить всё
$test2 = preg_replace('/([a-zA-Z]{1,}[0-9]{1,}[a-zA-Z]{1,})|([0-9]{1,}[a-zA-Z]{1,}[0-9]{1,})|([a-zA-Z]{1,}[0-9]{1,})|([0-9]{1,}[a-zA-Z]{1,})|[^0-9_]/', '', $test2);
$output = array_filter(explode('_', $test2));
print_r($output); // Results: 'Array ( [0] => 123 [1] => 1256 )'
Резюме:
[*]Извлеките переменная количество фрагментов чисел из строки.
[*]Строка содержит как минимум 1 число и может содержать другие цифры
и буквы, разделенные подчеркиванием.
[*]Должны быть извлечены только числа, которым не предшествуют и не следуют буквы.
[*]Имеют значение только числа в первой половине строки.
Поскольку нужна только первая половина, я решил разделить первое вхождение буквы или смешанное число-букву с помощью preg_split():
Код: Выделить всё
$test2 = '123_123_234_1Foo2'
$output = preg_split('/([0-9]{1,}[a-zA-Z]{1,})|[^0-9_]/', $test, 2);
preg_match_all('/[0-9]{1,}/', $output[0], $matches);
print_r($matches[0]); // Results: 'Array ( [0] => 123 [1] => 123 [2] => 234 )'
Подробнее здесь: https://stackoverflow.com/questions/469 ... -from-stri
Мобильная версия