我有名为
的文件1234_crob.jpg
1234.jpg
2323_örja.bmp
2323.bmp
etc.
我如何才能检索数字,例如1234和2323?
答案 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";
}