Что-то вроде этого:
$str = '..here_can_be_any_length "and_here_any_length/image123.jpg" and_here_also_any_length';
$m = array();
if (preg_match('#".*?/([^\.]+\.(jpg|jpeg|gif|png))"#', $str, $m)) {
var_dump($m[1]);
}
Что здесь даст:
string(12) "image123.jpg"
Я полагаю, что шаблон может быть немного проще - вы не можете проверить расширение, например, и принять любой тип файла; но не уверен, что это подойдет вашим потребностям.
В основном здесь шаблон:
- начинается с
"
- принимает любое количество символов до
/
: .*?/
- затем принимает любое количество символов, которые не являются
.
: [^\.]+
- затем проверяет точку:
\.
- затем идет расширение - одно из тех, которые вы решили разрешить:
(jpg|jpeg|gif|png)
- и, наконец, конец шаблона, еще один
"
И вся часть шаблона, соответствующая имени файла, окружена ()
, поэтому она захвачена - возвращается в $m