2010-03-27 58 views
2

我有一個以下字符串,我想提取image123.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 2010-03-27 16:11:39

回答

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 2014-07-14 17:54:25