PHP一次从字符串中删除多个内容

PHP一次从字符串中删除多个内容,php,string,substr,strpos,Php,String,Substr,Strpos,我将这样的字符串输入到数据库中,在存储之前无法格式化: image/upload/v1440427262/hglz466d8mm1pazysaoh.jpg#32e2e9a111a4f9f4aa01dbad2ca2aa403c994d28 我要使用的字符串的唯一部分是: hglz466d8mm1pazysaoh.jpg 我正在尝试使用strpos删除多余的数据 到目前为止,我已经成功地删除了hashtag之后的所有内容 ($data是原始字符串): 这与$dataclean返回时的预期效果一样

我将这样的字符串输入到数据库中,在存储之前无法格式化:

image/upload/v1440427262/hglz466d8mm1pazysaoh.jpg#32e2e9a111a4f9f4aa01dbad2ca2aa403c994d28
我要使用的字符串的唯一部分是:

hglz466d8mm1pazysaoh.jpg
我正在尝试使用strpos删除多余的数据

到目前为止,我已经成功地删除了hashtag之后的所有内容

($data是原始字符串):

这与$dataclean返回时的预期效果一样:

image/upload/v1440427262/hglz466d8mm1pazysaoh.jpg
但我不知道如何删除剩余的多余数据:

image/upload/v1440427262/
此外,这一切可以在一次点击中完成,还是必须分为几个操作?

使用:


如问题中所述,首先使用删除
#
之后的值

$link=substr($data,0,strpos($data,“#”)

然后使用
basename()
函数从URL访问文件名

比如说,

    $link = "http://example.com/folderPath/filename.php";
    echo basename($link);  // It will return filename.php
如果basename()不起作用,我将用正斜杠分解字符串

$data = 'image/upload/v1440427262/hglz466d8mm1pazysaoh.jpg#32e2e9a111a4f9f4aa01dbad2ca2aa403c994d28';
$pieces = explode("/", $data);

$dataclean = substr($pieces[3], 0, strpos($data, "#"));

substr+strpos
没有问题,但您的字符串似乎是一个URL,因此您可以在使用
basename
之前使用它来隔离路径。仅供参考,这只是另一个选择

basename(parse_url($yourString, PHP_URL_PATH));

您可以使用正则表达式函数:

preg_match("/[a-z0-9]+\.[a-z]{3}/i", $input_line, $output_array);

对于最后一部分,可以使用$temp=explode(“/”,$dataclean)$图像=$temp[3];或者使用正则表达式:
$dataclean=preg_replace(“~.*/|#.*~”,“,$data)我选择了basename/strpos方法,因为我读到它比regex快,并且我正在使用此函数更新新创建的数据库条目。格兰特说:“我不知道这句话有多正确,也不知道我所做的是不是一件特别安全的事情,但它似乎起了作用。”。对于10k循环,最慢的是正则表达式(pcre_研究标志比没有快一点),最快的是纯爆炸:
$dataclean=explode(“#”,end(explode(“/”,$data))[0]几乎一样快:所选答案:]这也会在散列之后返回数据。您需要在
basename
函数中包含删除它的内容。@ride_85027:我只是在示例中提到了这个概念。问题已经包含了使用
substr
删除
之后的值的解决方案。为什么
basename
不起作用?这应该是
substr($pieces[count($pieces)-1],0,strpos($data,“#”)
否则,每次数组索引到gethanks时都需要知道添加代码的细节。我相信basename是这个问题的最佳答案。我不知道为什么它不起作用,但如果它不起作用,这是另一种可能做你需要的事情的方式。
basename(parse_url($yourString, PHP_URL_PATH));
preg_match("/[a-z0-9]+\.[a-z]{3}/i", $input_line, $output_array);