2009-04-10 225 views
0

我有以下字符串替換的問題,我在這裏很修復多個字符串替換在相同的字符串在PHP

PFB樣本串

$string = 'The quick sample_text_1 56 quick sample_text_2 78 fox jumped over the lazy dog.'; 

$patterns[0] = '/quick/'; 
$patterns[1] = '/quick/'; 
$patterns[2] = '/fox/'; 

$replacements[2] = 'bear'; 
$replacements[1] = 'black'; 
$replacements[0] = 'slow'; 

echo preg_replace($patterns, $replacements, $string); 

我需要更換「快」視上號我送

也就是說,如果我輸入的功能是56,在quick56需要與bear,如果我輸入的功能是78,T被替換他之前快速78需要更換爲black

有人可以幫我這個嗎?

回答

0

除了使用preg_replace之外,還可以使用substr_replace來替換字符串,並使用strpos根據傳遞的參數找到字符串中的起點和終點。你的模式是一個簡單的字符串,所以它不需要一個正則表達式,並且substr_replace將允許你在字符串中指定一個開始和結束點來做替換(這似乎是你正在尋找的)。

編輯:

基於您的評論,這聽起來像你必須做很多檢查。我沒有測試過這一點,所以它可能有一個bug或兩個,但嘗試這樣的功能:

function replace($number, $pattern, $replacement) 
{ 
    $input = "The quick sample_text_1 56 quick sample_text_2 78 fox jumped over the lazy dog."; 
    $end_pos = strpos($input, $number); 
    $output = ""; 
    if($end_pos !== false && substr_count($input, $pattern, 0, $end_pos)) 
    { 
     $start_pos = strrpos(substr($input, 0, $end_pos), $pattern); 
     $output = substr_replace($input, $replacement, $start_pos, ($start_pos + strlen($pattern))); 
    } 
    return $output; 
} 

此功能如下:

  1. 首先,檢查「數」參數甚至在字符串中是否存在($end_pos !== false
  2. 檢查您的模式在字符串的開頭德和數字的位置(substr_count($input, $pattern, 0, $end_pos)
  3. 使用strrpos功能之間至少存在一次拿到拉斯維加斯的位置子串
  4. 使用起始位置和模式的長度內模式的牛逼發生插入使用substr_replace
+0

嗨豐富, 這只是一個樣本字符串和輸入的,要被替換字符串的數量和替換字符串我不知道開始部分。 我試過用substr_replace和strpos,但回到了正方形 – gnanesh 2009-04-10 13:20:03

1

我認爲,正則表達式將會使這個困難的替換字符串,但你應該能夠做到這一點僅使用strpos(),substr()str_replace()

  • 使用strpos找到56串和78

  • 然後把繩剪斷成使用substr在這些點串中的位置。

  • 現在,將'quick'替換爲正確的變量,具體取決於56或78是否發送給函數以及您正在處理哪個子字符串。

0

你這樣做是錯誤的。取決於你的函數輸入,你應該使用正確的查找和替換值。根據您的功能輸入值創建查找和替換值的映射。像:

$map = array(
    56 => array('patterns' => array(), 'replacements' => array()), 
    78 => array(...) 
); 
0

試試這個:

$searchArray = array("word1", "sound2", "etc3"); 
$replaceArray = array("word one", "sound two", "etc three"); 
$intoString = "Here is word1, as well sound2 and etc3"; 
//now let's replace 
print str_replace($searchArray, $replaceArray, $intoString); 
//it should print "Here is word one, as well sound two and etc three"