在PHP

2016-01-04 62 views
-1

替換字符串兩種模式之間我有兩個問題在PHP

    1.

我試圖取代我希望能夠更換兩種模式

例如之間的串some_string

(pattern1)some_string(pattern2) 

現在我得到這兩個圖案的索引和使用substr_replace任務

$base_url = 'pattern1_some_string&pattern2' 

if (preg_match('/pattern1/', $base_url, $start, PREG_OFFSET_CAPTURE) == 1 && 
      preg_match('/&pattern2/', $base_url, $end, PREG_OFFSET_CAPTURE)){ 

      $start = $start[0][1]; 
      $end = $end[0][1]; 
      $starting_offset = strlen('pattern1') + 1; 
      $start_index = $start + $starting_offset; 
      $replacement_range = $end - $start_index - 1; 
      var_dump(substr_replace($base_url, "replacement", $start_index, $replacement_range)); 

有沒有更簡單的方法來做到這一點?

2.

提供有一個更簡單的方法來做到1,它可以匹配第一檢測的圖案

。例如我希望能夠以取代在some_string

(pattern1)some_string(pattern2) 

,條件是(模式1)和(模式2)是第一個遇到的圖案

(pattern1)(pattern1)some_string(pattern2)(pattern2) -> replacing with replacement 

會導致

(pattern1)replacement(pattern2) 
+0

快速評論downvote背後的理性將有助於提高問題的質量。 – testing

+0

我得到了問題1的答案,但它有點棘手。這裏的問題1答案:http://pastebin.com/Gsv19L85,如果你嘗試一點點找出問題的答案會出現:D ahha –

+1

我不知道downvote,但事實上,你開始「我有兩個問題」可能無濟於事。請給每個問題一個問題。 – Ajean

回答

1

關於這個問題,更簡單的方法來做到這一點是preg_replace

$base_url = 'pattern1_some_string&pattern2'; 

$reg = '/^(.*?pattern1).*(&pattern2.*)$/'; 

$replace = "MY_STRING"; 

$str = preg_replace($reg, "$1" . $replace . "$2", $base_url); 

echo $str; //pattern1MY_STRING&pattern2 

Here you have工作的例子

關於這個問題我不太瞭解它(這不是同一個問題1?)。如果沒有,你可以更詳細地解釋它嗎?

UPDATE:

如果你想要一個更動態的過程,在這裏你有一個函數:

function getReplaced($subject, $pattern1, $pattern2, $replace){ 

    $reg = '/^(.*?' . preg_quote($pattern1) . ').*(' . preg_quote($pattern2) . '.*)$/'; 

    return preg_replace($reg, "$1" . $replace . "$2", $subject); 

} 
0

ü應該看preg_replace_callback功能。