如何在PHP中只提取部分字符串?

时间:2010-03-27 16:06:18

标签: php regex preg-match

我有一个跟随字符串,我想提取image123.jpg。

..here_can_be_any_length "and_here_any_length/image123.jpg" and_here_also_any_length

image123可以是任意长度(newimage123456等),并且可以扩展为jpg,jpeg,gif或png。

我认为我需要使用preg_match,但我不确定并且想知道如何编码它,或者我是否可以使用其他任何方式或功能。

3 个答案:

答案 0 :(得分:5)

您可以使用:

if(preg_match('#".*?\/(.*?)"#',$str,$matches)) {
   $filename = $matches[1];
}

或者,您可以使用preg_match在双引号之间提取整个路径,然后使用函数basename从路径中提取文件名:

if(preg_match('#"(.*?)"#',$str,$matches)) {
    $path = $matches[1]; // extract the entire path.
    $filename =  basename ($path); // extract file name from path.
}

答案 1 :(得分:5)

这样的事情:

$str = '..here_can_be_any_length "and_here_any_length/image123.jpg" and_here_also_any_length';
$m = array();
if (preg_match('#".*?/([^\.]+\.(jpg|jpeg|gif|png))"#', $str, $m)) {
    var_dump($m[1]);
}

在这里,它会给你:

string(12) "image123.jpg" 

我认为模式可能更简单一些 - 例如,您无法检查扩展名并接受任何类型的文件;但不确定它是否符合您的需求。


基本上,在这里,模式:

  • "
  • 开头
  • /.*?/
  • 之前使用任意数量的字符
  • 然后接受任意数量的非.字符:[^\.]+
  • 然后检查一个点:\.
  • 然后是扩展名 - 您决定允许的其中一个:(jpg|jpeg|gif|png)
  • ,最后,模式结束,另一个"

与文件名对应的模式的整个部分被()包围,因此它被捕获 - 在$m中返回

答案 2 :(得分:1)

$string = '..here_can_be_any_length "and_here_any_length/image123.jpg" and_here_also_any_length';
$data = explode('"',$string);
$basename = basename($data[1]);