这个字符串格式有点php帮助

时间:2009-12-24 13:37:09

标签: php

我有一个这种格式的字符串:

    /SV/temp_images/766321929_2.jpg

是否有任何一小段代码可以在下划线之前获取数字,但是在temp_images /之后?在这种情况下,我只想 766321929 ...?

由于

5 个答案:

答案 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));