2011-11-25 78 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)); 
} 

没有正则表达式

相关问题