2015-01-03 1 views
1

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

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

или как этот

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

Цель:

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

Как это сделать?

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

+0

Будет ли файл иметь каждый раз '.' точку и ничего больше? – Rizier123

+0

каждый файл имеет расширение, подобное выше (например, rar). Я не понимаю, о чем вы спрашиваете. Мне нужно извлечь test.rar – user2826075

+0

Тогда я надеюсь, что мой ответ решает вашу проблему: D – Rizier123

ответ

0

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

<?php 

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

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

    echo $output[0][0]; 

?> 

Выход:

test.rar 

EDIT:

Если 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

Зачем голосовать? Это работает, и это именно то, что хочет! – Rizier123

+0

Ahh .... теперь, я знаю, о чем вы просите. Извините за неудобства. Имя файла также может быть таким: attachment; filename * = UTF-8''Epost% 20-test.part01.rar – user2826075

+0

@ user2826075 Являются ли 2 одинарные кавычки когда-либо там? – Rizier123

-1

вы должны дать некоторую информацию. - первая часть всегда такая же? это имя файла всегда в конце, сразу после?

--edit--

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

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

$filename = substr($str, 29); 
+0

Uii есть ли какой-то скрытый ответ, которого я не вижу в этом комментарии? – Rizier123

+0

имя файла всегда в конце. Мне нужно удалить 'attachment; filename * = UTF-8''' – user2826075

+0

выше не ответили на вопрос, вы должны добавить это на комментарий –

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

Нет соответствия с: 'attachment; filename * = UTF-8''Epost% 20-test.part01.rar' Я думаю, вы хотите отредактировать свой ответ – Rizier123

+0

Хорошо, я сделаю это ... @ Rizier123 –

Смежные вопросы