2016-02-11 47 views
1

字符串替換文本我有這個字符串:在使用PHP

$my_string = "http://apinmo.com/1/2/3.jpg 4444/8888/7777 http://apinmo.com/4/5/8-1.jpg"; 

,我需要刪除網址的最後兩個slashs得到這個,其餘保持不變:

$my_NEW_string = "http://apinmo.com/123.jpg 4444/8888/7777 http://apinmo.com/458-1.jpg"; 

我嘗試這樣做:

$my_NEW_string = preg_replace('/(?<=\d)\/(?=\d)/', '', $my_string); 

,但我得到這個:

$my_NEW_string = "http://apinmo.com/123.jpg 444488887777 http://apinmo.com/458-1.jpg"; 

斜槓4444/8888/7777刪除,這不是我所需要的。他們必須留在那裏。

UPDATE:由於在使用該代碼的情況下,我需要這樣的方法:使「HTTP」和「JPG」之間的替代

+0

爲什麼你不試圖從字符串只獲取圖像網址? – Noman

+0

字符串中的空格是否重要? –

+0

@JayBlanchard字符串中有空格。是的,他們仍然保持原樣。 – JPashs

回答

3

這裏是另一種方式來做到這一點,並保留您的空間:

$my_string = "http://apinmo.com/1/2/3.jpg 4444/8888/7777 http://apinmo.com/4/5/8-1.jpg"; 
$string_array = explode(' ', $my_string); 
print_r($string_array); // for testing 

$new_array = ''; 
foreach($string_array AS $original) { 
    $pos = strpos($original, 'http'); 
    if(0 === $pos){ 
     $new = preg_replace('/(?<=\d)\/(?=\d)/', '', $original); 
     $new_array[] = $new; 
    } else { 
     $new_array[] = $original; 
    } 
} 
$new_string = implode(' ', $new_array); 
echo $new_string; 

返回(注意保留空格):

http://apinmo.com/123.jpg 4444/8888/7777 http://apinmo.com/458-1.jpg 

編輯 -純正則表達式的方法:

$new_string = preg_replace('/(?<=\/\d)(\/)/', '', $my_string); 
echo $new_string; 

返回:http://apinmo.com/123.jpg 4444/8888/7777 http://apinmo.com/458-1.jpg

CAVEATS: 一個。 )即使有沒有字符串中的空格 2.)不起作用如果/之間的任何數字的長度超過一位數。 iii。 )如果第二組數字像4444/5/8888那麼第二個斜槓也會在這裏被移除。

這裏是正則表達式如何分解:

使用正回顧後發來匹配/後面跟着一個數字(?<=\/\d)我可以斷言我所期待的 - 我只是想去掉前一個後斜槓正斜槓後跟一個數字。因此,我可以在向後看後立即捕獲其他正斜槓(\/)。沒有必要包括http://開始或.jpg關閉。

+0

謝謝,但它基於「空間」。由於使用此代碼的上下文,我需要這種方法:在'http'和'jpg'之間進行替換 – JPashs

+0

這不是你最初要求的@canelones –

+0

如果有空格,那麼它們應該保留,這就是我的意思,但空間可能不存在,那麼我不能使用它們來做到這一點。 – JPashs

3

這是你可以用一個例子:

<?php 

$my_string = "http://apinmo.com/1/2/3.jpg 4444/8888/7777 http://apinmo.com/4/5/8-1.jpg"; 
$my_array= split(" ",$my_string); // split it to 3 strings 
$part1=preg_replace('/(?<=\d)\/(?=\d)/', '', $my_array['0']); 
$part2=$my_array['1']; 
$part3=preg_replace('/(?<=\d)\/(?=\d)/', '', $my_array['2']); 

$my_new_string=$part1." ".$part2." ".$part3; 
?> 
+0

這不保留空格。 –

+0

如果我有更多的零件?如果空間不足,它將失敗。 – JPashs

+0

我不知道我完全理解你的意思,但是當你得到三個部分時,你可以添加儘可能多的空格,如你所想 – FareedMN

0

如果字符串總是有圖像,您將獲得$matches數組中的所有圖像。

按你的評論

這可以幫助:我只需要「HTTP」和「JPG」之間做出更換。

您可以根據需要使用數組進行替換。

$input = 'http://apinmo.com/123.jpg 4444/8888/7777 http://apinmo.com/458-1.jpg'; 
preg_match_all('(https?:\/\/\S+\.(?:jpg|png|gif))', $input, $matches); 

echo '<pre>';print_r($matches);echo '</pre>'; 

輸出:

Array 
(
    [0] => Array 
     (
      [0] => http://apinmo.com/123.jpg 
      [1] => http://apinmo.com/458-1.jpg 
     ) 

)