繁体   English   中英

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

[英]How to extract only part of string in PHP?

我有一个跟随字符串,我想提取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 ,但我不太确定并且想知道如何编码它,或者我是否可以使用任何其他方法或功能。

您可以使用:

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

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

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

这样的事情怎么样:

$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" 

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


基本上,这里的模式:

  • 从一个"开始"
  • 采用任何数量的字符,直到/.*?/
  • 然后取任意数量的不是a的字符. [^\\.]+
  • 然后检查一个点: \\.
  • 然后是扩展 - 你决定允许的其中一个: (jpg|jpeg|gif|png)
  • 最后,模式的结束,另一个"

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM