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

如何在PHP中只提取字符串的一部分?,php,regex,preg-match,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的扩展名 我假设我需要使用,但我不是很确定,我想知道如何编写代码,或者我是否可以使用任何其他方式或功能。您可以使用: if(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的扩展名

我假设我需要使用,但我不是很确定,我想知道如何编写代码,或者我是否可以使用任何其他方式或功能。

您可以使用:

if(preg_match('#".*?\/(.*?)"#',$str,$matches)) {
   $filename = $matches[1];
}
或者,您可以使用preg_match提取双引号之间的整个路径,然后使用以下函数从路径中提取文件名:


像这样的东西怎么样:

$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

中返回,如果周围是标记,考虑使用DOM、XPath或SimuleHTML。
$string = '..here_can_be_any_length "and_here_any_length/image123.jpg" and_here_also_any_length';
$data = explode('"',$string);
$basename = basename($data[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]);