получить номер из файла с помощью регулярного выражения? - PullRequest
1 голос
/ 16 января 2010

У меня есть файлы с именем

1234_crob.jpg
1234.jpg
2323_örja.bmp
2323.bmp
etc.

Как я могу просто получить номера, например, 1234 и 2323?

Ответы [ 4 ]

3 голосов
/ 16 января 2010

Если имена файлов начинаются с цифр, нет необходимости использовать регулярные выражения, попробуйте вместо этого:

foreach (glob('/path/to/dir/{0,1,2,3,4,5,6,7,8,9}*', GLOB_BRACE) as $file)
{
    echo $file . ' = ' . intval(basename($file)) . "<br />\n";
}

Этот обновленный шаблон глобуса будет соответствовать только именам файлов, начинающимся с цифры , как вы и просили.


@ ghostdog74 : Вы правы.

foreach (glob('/path/to/dir/{0,1,2,3,4,5,6,7,8,9}*', GLOB_BRACE) as $file)
{
    echo $file . ' = ' . filter_var(basename($file), FILTER_SANITIZE_NUMBER_INT) . "<br />\n";
}
2 голосов
/ 17 января 2010

При условии, что вы передаете только имена файлов (а не пути к файлам), следующее должно получить все последовательные числа 0-9:

function getDigits($fn) {
    $arr = array();
    preg_match('/[0-9]+/', $fn, $arr);
    return $arr;
}

ПРИМЕР ИСПОЛЬЗОВАНИЯ

var_dump(getDigits('hey_12345.gif'));
/*
output:
array(1) {
  [0]=>
  string(5) "12345"
}
*/

var_dump(getDigits('123487_dude.jpg'));
/*
output:
array(1) {
  [0]=>
  string(6) "123487"
}
*/
2 голосов
/ 16 января 2010

Сначала взорвать на точку, а затем взорвать на подчеркивании, а затем ваш номер является первым элементом в возвращенном списке.

<?php
$str1 = "1234.jpg";
$str2 = "1234_crob.jpg";

$pieces = explode("_",current(explode(".",$str1)));
echo $pieces[0]; // prints 1234

$pieces = explode("_",current(explode(".",$str2)));
echo $pieces[0]; // prints 1234
?>

Да, я понимаю, что это не регулярное выражение, но это слишком простая задача, чтобы использовать регулярные выражения.

РЕДАКТИРОВАТЬ: модифицированный код для работы с вашими отредактированными примерами форматирования. РЕДАКТИРОВАТЬ: Изменено для точного размещения в одной строке кода.

0 голосов
/ 17 января 2010

попробуйте это. Если у вас есть такие числа, как 045_test.jpg, использование intval даст вам 45 вместо 045

$path="/path/[0-9]*";
foreach (glob($path) as $files ){
    $base=basename ($files);
    $s   = preg_split("/[^0-9]/",$base,2);
    echo $s[0]."\n";
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...