2011-11-25 73 views

回答

11

這個工作,雖然有點低效:

$a = "Yo! **Hello** this is the first word of Hello in this sentence"; 
$a = preg_replace('/Hello/', 'Welcome', $a, 1); 

其他流行的答案是:

$b = str_replace('Hello', 'Welcome', $a, 1); 

不起作用。 str_replace的第四個參數應該是一個變量,它通過引用傳遞,並且str_replace將它設置爲替換的數量爲

更好的解決方案將是,以提取從輸入字符串的兩個子串:

  1. 子串的Hello第一次出現之前,把它的第一次出現之後$s1
  2. 子串Hello,稱之爲$s2

人們可以使用strpos得到的位置。

結果是$s1.'Welcome'.$s2

+1

第一個解決方案,實際工作;) – str

+0

剛剛看到你的編輯 - 我已經實現你的第二個解決方案,並張貼它作爲答案:) – nickb

+0

*看到效率低下的答案* ...在生產代碼中使用它。爲什麼?比第二個建議的解決方案更容易理解:) – Dennis

0

使用str_replace('Hello','Welcome',$a,1);

+3

無過載僅更換第一次出現* *執行「。 – str

4

只要使用substr兩次strpos

$a = "Yo! **Hello** this is the first word of Hello in this sentence"; 
$search = "Hello"; 
$replacement = "Welcome"; 
$b = substr($a, 0, strpos($a, $search)) . $replacement . substr($a, strpos($a, $search) + strlen($search)); 

Demo

+1

+1,這是對普通字符串(無正則表達式)執行此操作的方式。 – codaddict

1

這是最好的緊湊性和表演:「如果獲得通過,這將被設置爲替換數:

if(($offset=strpos($string,$replaced))!==false){ 
    $string=substr_replace($replaced,$replacer,$offset,strlen($replaced)); 
} 

沒有正則表達式

相關問題