从正则表达式的文件中获取数字?

时间:2010-01-16 20:20:55

标签: php regex

我有名为

的文件
1234_crob.jpg
1234.jpg
2323_örja.bmp
2323.bmp
etc.

我如何才能检索数字,例如1234和2323?

4 个答案:

答案 0 :(得分:3)

如果文件名都以数字开头,则无需使用正则表达式,请尝试以下方法:

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";
}

更新的glob模式将仅按照您的要求匹配以数字开头的文件名。


@ 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";
}

答案 1 :(得分:2)

期间的第一个explode,然后在下划线上爆炸,然后您的数字是返回列表中的第一个元素。

<?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
?>

是的,我意识到这不是正则表达式,但使用正则表达式这个任务太简单了。

编辑:修改后的代码适用于新编辑的格式示例。 编辑:修改为在一行代码中干净利落。

答案 2 :(得分:2)

假设您只传入文件名(而不是文件路径),以下内容应该检索所有连续的数字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"
}
*/

答案 3 :(得分:0)

试试这个。如果你有像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";
}