2017-07-01 70 views
0

我需要從文件名url的起始處刪除一個子字符串。如何刪除url中文件名的一部分

我需要刪除的子字符串總是一系列數字然後連字符然後字gallery然後另一個連字符。

例如2207-gallery-2208-gallery-1245-gallery-

我怎樣才能改變這樣的:

http://img.pass.com:7710/img.pass.com/img-1/2207-gallery-25171-content_gallery-1428380843.jpg 

這樣:

http://img.pass.com:7710/img.pass.com/img-1/25171-content_gallery-1428380843.jpg 

要替換的子串始終是不同的。

+0

請給出更多的說明:是刪除的文本總是'2207-gallery-'?或者這只是一個例子? –

+0

@HamzaAbdaoui更新 – ATIKON

+0

因此它可以是'2208-gallery-','1245-gallery-'等......? –

回答

2

這將匹配1個或多個數字然後連字符,然後 「庫」,那麼連字符:

圖樣:(Demo

/\d+-gallery-/ 

PHP代碼:(Demo

$image='http://img.pass.com:7710/img.pass.com/img-1/2207-gallery-25171-content_gallery-1428380843.jpg'; 
echo preg_replace('/\d+-gallery-/','',$image); 

輸出:

http://img.pass.com:7710/img.pass.com/img-1/25171-content_gallery-1428380843.jpg 

這是你的非正則表達式的方法:

echo substr($image,0,strrpos($image,'/')+1),substr($image,strpos($image,'-gallery-')+9); 
1

PHP做到這一點:

function renameURL($originalUrl){ 
    $array1 = explode("/", $originalUrl); 
    $lastPart = $array1[count($array1)-1];//Get only the name of the image 
    $array2 = explode("-", $lastPart); 
    $newLastPart = implode("-", array_slice($array2, 2));//Delete the first two parts (2207 & gallery) 
    $array1[count($array1)-1] = $newLastPart;//Concatenate the url and the image name 
    return implode("/", $array1);//return the new url 
} 
//Using the function : 
$url = renameURL($url); 

DEMO

+1

雖然正則表達式可能比一些非正則表達式方法慢,但我覺得編寫如此多的代碼並利用7個函數而不是單個preg_replace()調用非常有吸引力。這是PHP設計人員爲其創建正則表達式函數的原因。 – mickmackusa

1
function get_numerics ($str) { 
    preg_match_all('/\d+/', $str, $matches); 
    return $matches[0]; 
} 

$one = 'http://img.pass.com:7710/img.pass.com/img-1/2207-gallery-25171-content_gallery-1428380843.jpg'; 


$pos1 = strpos($one, get_numerics($one)[3]); 
$pos2 = strrpos($one, '/')+1; 
echo ((substr($one, 0, $pos2).substr($one, $pos1))); 

看到它幫助你。

+0

如果您打算使用正則表達式,請單獨使用它。如果你不想使用正則表達式或其他速度原因,請不要使用任何正則表達式函數。用同樣的方法做這兩件事似乎很愚蠢。 – mickmackusa