Php, удалить из строчки все лишнее

251
08 июля 2022, 18:50

/upl/img/2jf-img1.webp?id=2335

Как удалить из строчки все и оставить только img1.webp

То есть "2jf-" может не быть, а может и есть равно как из все то что за знаком "?"

Answer 1
preg_replace('~(?:.*-)?([^/]+?)(?:\?.*)?$~', '$1', $str);

Результаты:

/upl/img/2jf-img1.webp?id=2335 -> img1.webp
/upl/img/user/2/2jf-img1.webp?id=2335 -> img1.webp
/upl/assets/img1.webp?id=2335 -> img1.webp
/im1.jpg -> im1.jpg
/im1.jpg? -> im1.jpg
/im1.jpg?id=xxx -> im1.jpg
/xyz-im1.jpg?id=xxx -> im1.jpg
-im1.jpg?id=xxx -> im1.jpg
Answer 2

Если 2jf- может не быть, но обязательное, если есть, то

$name = basename(parse_url('/upl/img/2jf-img1.webp?id=2335')['path']);
echo $name;
Answer 3

Можно просто порезать explode:

function foo($src) {
    $res = explode('?', $src)[0];
    $res = explode('/', $res);
    $res = array_pop($res);
    $res = explode('-', $res);
    $res = array_pop($res);
    return $res;    
}

echo foo('/upl/img/2jf-img1.webp?id=2335'), PHP_EOL;
echo foo('/upl/img/img1.webp?id=2335'), PHP_EOL;
echo foo('/upl/img/2jf-img1.webp'), PHP_EOL;
echo foo('/a/b/c/d/e/f/g/h/i/img1.webp'), PHP_EOL;

Можно регуляным выражением:

function foo($src) {
    preg_match('#([^-/\?]+)(?:\?.*|$)#', $src, $m);
    return $m ? $m[1] : '';
}

parse_url:

function foo($src) {
    $res = basename(parse_url($src)['path']);
    $res = explode('-', $res);
    $res = array_pop($res);
    return $res;    
}

3v4l

READ ALSO
Вытащить json из html

Вытащить json из html

Есть html (это лишь небольшой кусок html)

289
Вопрос по MVC и выбору вариантам ответа

Вопрос по MVC и выбору вариантам ответа

Есть вопрос по идеологииМеня два раза заваливали на собеседованиях на нем и хочу понять как же все таки правильно делать согласно адептам...

256
Проблема со scan в dynamodb

Проблема со scan в dynamodb

Пытаюсь сделать scan в dynamodb, с использованием PHP и пакета aws/aws-sdk-php Мне нужно найти непрочитанные уведомления для определенных аккаунтовКроме...

202