2016-06-07 102 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 
相关问题