2016-06-07 108 views
0

我有幾個字符串,如果字符串是如下PHP替換第二次發生?以&

$string ="w?w+f=w?wefwef?blahblah"; 

$desiredString ="w?w+f=w&wefwef?blahblah"; 

如果這個格式,我試圖取代第二?至&別無所求。

我試過正則表達式和preg_match,但沒有運氣。

+0

你爲什麼最終以該字符串開頭?通常情況下,最好在實際發生的情況下修復這樣的情況,而不要在事後修補它。 –

+0

檢查http://stackoverflow.com/questions/23239061/preg-replace-replace-second-occurrence – jitendrapurohit

回答

3

在當前的情況下的解決方案是:

$string ="w?w+f=w?wefwef?blahblah"; 

$desiredString = preg_replace('/^(.+?\?.+?)\?/', '$1&', $string); 

echo $desiredString; 

輸出:

w?w+f=w&wefwef?blahblah 

第N occurence正則表達式:

/^((?:(?:.*?\?){0}.*?))\?/ // for first occurence 
/^((?:(?:.*?\?){1}.*?))\?/ // for second occurence 
/^((?:(?:.*?\?){2}.*?))\?/ // for third occurence 
          // etc. 
+0

哇!單線正則表達式。但是,如果我想替換其中的第n個實例,我可以知道如何使用嗎? – Thamilan

+0

查看答案,我已更新它。 –

+0

真棒!,效果不錯,但不是在我的laravel腳本。 – kennyben

1

嘗試這種情況:

$string ="w?w+f=w?wefwef?blahblah"; 
$desiredString = ''; 
$j = 0; 
for($i = 0; $i < strlen($string); $i++){ 
    if($string[$i] == '?' && ++$j == 2) 
     $desiredString .= '&'; 
    else 
     $desiredString .= $string[$i]; 
} 

echo $desiredString; //w?w+f=w&wefwef?blahblah 
相關問題