Как извлечь только часть строки в PHP? - PullRequest
2 голосов
/ 27 марта 2010

У меня есть следующая строка, и я хочу извлечь image123.jpg.

..here_can_be_any_length "and_here_any_length/image123.jpg" and_here_also_any_length

image123 может быть любой длины (newimage123456 и т. Д.) И с расширением jpg, jpeg, gif или png.

Полагаю, мне нужно использовать preg_match , но я не совсем уверен и хотел бы знать, как его кодировать или есть ли другие способы или функции, которые я могу использовать.

Ответы [ 3 ]

5 голосов
/ 27 марта 2010

Что-то вроде этого:

$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

5 голосов
/ 27 марта 2010

Вы можете использовать:

if(preg_match('#".*?\/(.*?)"#',$str,$matches)) {
   $filename = $matches[1];
}

Кроме того, вы можете извлечь весь путь между двойными кавычками, используя preg_match, а затем извлечь имя файла из пути, используя функцию basename:

if(preg_match('#"(.*?)"#',$str,$matches)) {
    $path = $matches[1]; // extract the entire path.
    $filename =  basename ($path); // extract file name from path.
}
1 голос
/ 28 марта 2010
$string = '..here_can_be_any_length "and_here_any_length/image123.jpg" and_here_also_any_length';
$data = explode('"',$string);
$basename = basename($data[1]);
...