我有一个这种格式的字符串:
/SV/temp_images/766321929_2.jpg
是否有任何一小段代码可以在下划线之前获取数字,但是在temp_images /之后?在这种情况下,我只想 766321929 ...?
由于
答案 0 :(得分:3)
这应该可以解决问题:
$str = '/SV/temp_images/766321929_2.jpg';
$m = array();
if (preg_match('#temp_images/(\d+)_#', $str, $m)) {
echo $m[1];
}
想法:
preg_match
与正则表达式一起使用
temp_images/
”_
”\d
表示)
$m
将包含匹配的内容:
$m[0]
将是匹配的所有内容$m[1]
将是第一个被捕获的(()
)部分 - 即您正在寻找的内容,此处
输出:
766321929
如果你很好奇以及如何更多地了解正则表达式,请不要犹豫,看看Regular Expressions (Perl-Compatible) - 有很多有趣的东西要阅读,那里; - )
答案 1 :(得分:1)
$str = '/SV/temp_images/766321929_2.jpg';
list($numbers) = explode('_', basename($str));
echo $numbers;
答案 2 :(得分:0)
这是一种肮脏的方式:
$contents = ' /SV/temp_images/766321929_2.jpg';
$contents = substr($contents, strpos($contents, 'temp_images/'));
$contents = substr($contents, strpos($contents, '/'));
$contents = substr($contents, 1);
$contents = substr($contents, 0, strpos($contents, '_'));
print $contents;
答案 3 :(得分:0)
您可以使用basename然后explode生成的文件名......
$fileComponents = explode('_', basename($filePathString));
$requiredComponent = $fileComponents[0];
那就是说,你需要根据需要添加健全性检查等。
答案 4 :(得分:0)
与特定目录无关的通用解决方案:
$name = preg_replace('/_.*/', '', basename($string));