Вот рабочий скрипт, который использует несколько замен регулярных выражений для выполнения работы.Наиболее важной логикой является начальное разделение регулярных выражений по следующему шаблону:
(?=\.\w+)(?!.*\..*\.)
Это говорит о разделении по самой последней точке, которая считается расширением файла.Это оставляет нам два следующих компонента:
Array
(
[0] => TEST#%_'JanE,.-_doc30)/||\
[1] => .pdf$@!3)
)
Остальная часть скрипта обрабатывает имя файла, заменяя все группы несловных символов одним заполнителем подчеркивания.Затем другое регулярное выражение извлекает расширение файла, удаляя все после .pdf
.
$text = "TEST#%_'JanE,.-_doc30)/||\.pdf$@!3)";
$parts = preg_split ("/(?=\.\w+)(?!.*\..*\.)/", $text);
$filename = preg_replace('/[^A-Za-z0-9]+/', '_', $parts[0]);
$filename = preg_replace('/_$/', '', $filename);
$ext = preg_replace('/^(\.[A-Za-z0-9]+).*$/', '$1', $parts[1]);
print_r($parts);
$file = $filename . $ext;
echo $file;
TEST_JanE_doc30.pdf