preg match — извлечение имени файла из содержимого с помощью переполнения стека

Мне нужно регулярное выражение для извлечения имени файла (включая расширение файла) из следующей строки:

attachment; filename*=UTF-8''test.rar

или как это

attachment; filename*=UTF-8''Epost%20-test.part01.rar

Цель:

test.rar
Epost%20-test.part01.rar

Как я могу это сделать?

Примечание: я использую preg_match для извлечения

1

Решение

Это должно работать для вас:

<?php

$str = "attachment; filename*=UTF-8''test.rar";

preg_match_all("/\w+\.\w+/", $str, $output);

echo $output[0][0];

?>

Выход:

test.rar

РЕДАКТИРОВАТЬ:

Если 2 одинарные кавычки находятся в строке каждый раз, вы можете получить все после:

<?php

$str = "attachment; filename*=UTF-8''Epost%20-test.part01.rar";

preg_match_all("/[^\'\']+$/", $str, $output);

echo $output[0][0];

?>

Выход:

Epost%20-test.part01.rar
0

Другие решения

Попробуйте просто использовать взгляд позади

$str = "attachment; filename*=UTF-8''test.rar";

preg_match('/(?<=\')[a-z-A-Z0-9 -,.()%]*/', $str, $matches);

print_r($matches);

DEMO : https://www.regex101.com/r/yO9nQ4/1

0

Вам нужно дать больше информации.
первая часть всегда одна и та же? имя файла всегда в конце, сразу после »?

—редактировать—

если вам просто нужно удалить первую часть, не используйте regexp

$str = "attachment; filename*=UTF-8''test.rar";

$filename = substr($str, 29);
-1