2010-03-27 6 views
2

У меня есть следующая строка, и я хочу извлечь изображение123.jpg.Как извлечь только часть строки в PHP?

..here_can_be_any_length "and_here_any_length/image123.jpg" and_here_also_any_length 

image123 может быть любой длины (newimage123456 и т.д.) и с расширением JPG, JPEG, GIF или PNG.

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

Любая помощь будет оценена по достоинству.

+0

в случае окружающие разметки, рассмотреть возможность использования DOM, XPath или SimpleHTML – Gordon

ответ

5

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

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. 
} 
5

насчет что-то вроде этого:

$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

1
$string = '..here_can_be_any_length "and_here_any_length/image123.jpg" and_here_also_any_length'; 
$data = explode('"',$string); 
$basename = basename($data[1]); 
+0

Высокий - очень компактный и до точки. – ProfVersaggi

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